2016-07-23 2 views
0

В моей модели сочетание 2-х полей (компании, AM) должен быть уникальнымПочему Уникальные вместе не предотвращают уникальные значения?

class Vendor_AM(models.Model): 
    version = IntegerVersionField() 
    company = models.ForeignKey(V_Company, on_delete=models.PROTECT) 
    AM = models.ForeignKey(AM, on_delete=models.PROTECT) 
    recomendedprice = MoneyField(max_digits=10, decimal_places=2, default_currency='USD') 
    price = MoneyField(max_digits=10, decimal_places=2, default_currency='USD') 
    is_active = models.BooleanField(default=True) 
    def __unicode__(self): 
     return u'%s %s %s' % (self.id, self.AM.material.name , self.company.name) 

    class Meta: 
     unique_together = (("AM", "company"),) 

По этой причине, у меня есть это определено в классе Meta. Но вместо предупреждения проверки формы я получаю сообщение об ошибке при сохранении. Что может быть причиной?

IntegrityError в/поставщике/manufacture_material/новая/1/http://127.0.0.1:8000/vendor/company/company_am_details/1// колонна AM_id, company_id не является уникальной

UPDATE: Формы:

class Vendor_AMForm(forms.ModelForm): 

    class Meta: 
     model = Vendor_AM 
     fields = [ 'AM','recomendedprice','is_active' ] 

Я заселение компании непосредственно в вид.

+0

Как вы это подтвердите? Как выглядит ваша форма? –

+0

Вы правильно выполнили миграцию базы данных? –

+0

Я не проверяю в форме. Я предполагал, что если у меня есть уникальная валидация, позаботиться о ней. –

ответ

1

Форма может проверяться только на полях, которые она фактически содержит. Поскольку вы исключили из формы company, комбинация компании и AM не может быть проверена.

+0

Спасибо. Я начал думать об этом, когда вы спрашивали о форме. Добавлена ​​опция «except IntegrityError» при сохранении, чтобы ее поймать. –

Смежные вопросы