2016-10-24 2 views
1

У меня есть два целых столбца и хочу ограничить их тем, что они не имеют одинакового значения в строке. Например,Как ограничить два столбца, чтобы они не имели одинаковое значение с помощью Django?

id | type1 | type2 | 
------------------------ 
1 | 1 | 2 | 
2 | 1 | 3 | 
3 | 3 | 3 

Первый и второй строки в порядке, но третий не должен существовать. Как добавить это ограничение в модель Django?

+0

игнорировать мою предыдущую ссылку, я думаю, что это именно то, что вы просите http://stackoverflow.com/questions/2281179/adding-extra-constraints-into-fields-in-django – serg

ответ

1

Ведение в в модели некрасиво/не рекомендуется, вам нужно будет что-то вроде:

class MyModel(models.Model): 
    type1 = models.IntegerField() 
    type2 = models.IntegerField() 

    def save(self, *args, **kwargs):   
     if self.type1 != self.type2: 
      return super().save(*args, **kwargs) 
     else: 
      return # cancel the save - which isn't recommended 

Это не рекомендуется, так как пользователь не получает какие-либо отзывы о том, что пошло не так, и отмена сохранения может привести к неправильное поведение. (сигналы, переадресации и т. д. могут быть сбой)

Если бы вы могли, я бы посоветовал сделать это как подтверждение формы.

class MyForm(forms.Form): 
    type1 = forms.IntegerField() 
    type2 = forms.IntegerField() 

    def clean(self): 
     cleaned_data = super().clean() 
     if cleaned_data['type1'] == cleaned_data['type2']: 
      raise forms.ValidationError("Type1 and Type2 need to be different") 

РЕДАКТИРОВАТЬ 1: Исправить отступ.

EDIT 2: Добавлен пример проверки формы.

EDIT 3: Добавлено больше информации о том, почему это не рекомендуется.

РЕДАКТИРОВАТЬ 4: Прочитать неверно, обновленный ответ.

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

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