Краткий ответ: вы можете достичь этого в Django, используя "нативные методы django". Я не уверен, что именно вы подразумеваете под «нативными методами Джанго»; Я предполагаю, что вы имеете в виду звонки в Django API.
Есть несколько способов сделать это. Если ваши пользователи могут создавать только Bout
экземпляры, используя предоставленную вами форму, то методы проверки формы могут проверять указанные вами условия. Например ::
class BoutForm(forms.ModelForm):
class Meta:
model = Bout
def clean(self):
fighter_1 = self.cleaned_data.get('fighter_1')
fighter_2 = self.cleaned_data.get('fighter_2')
winner = self.cleaned_data.get('winner')
date = self.cleaned_data.get('date')
if not (fighter_1 and fighter_2 and (fighter_1.id != fighter_2)):
raise forms.ValidationError("Both fighters cannot be the same")
if not (winner and (winner.id == fighter_1.id or winner.id == fighter_2.id)):
raise forms.ValidationError("Winner is not in the fight")
if not (date and date < datetime.today()):
raise forms.ValidationError("Winner is not in the fight")
return self.cleaned_data
Вышеуказанный фрагмент неполный. Вы можете настроить его под свои нужды. Также взгляните на новые растрепанные валидаторы форм Django .
Если, с другой стороны, ваши пользователи могут создавать экземпляры с помощью API (например, путем создания экземпляра класса Bout
в своих программах), вам придется выполнить проверку, переопределив метод save()
Bout
класс.