私たちはDjangoのチュートリアル https://docs.djangoproject.com/en/1.9/intro/tutorial07/複数の外部キーの検証
にポーリングアプリを使用する私たちは、管理者には、次の
class Choice(models.Model):
question = models.ForeignKey(Question,
on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
def clean(self):
super(Choice, self).clean()
choice_list = Choice.objects.filter(question=self.question)
choice_list_text = [a.choice_text for a in choice_list if a.pk != self.pk]
choice_list_text.append(self.choice_text)
if len(set(choice_list_text)) != len(choice_list_text):
raise ValidationError("You have duplicate entries")
def __str__(self):
return self.choice_text
により重複選択項目テキストを防ぐために選択モデルを変更することができ、選択モデルは質問フォームとインラインです。つまり、インライン選択が1つずつ編集されると、検証は100%機能します。次のように私たちは、ケースを持つことができます
Choice: A choice, Votes: 0
Choice: Another choice, Votes: 0
は、保存されたとき、これはValidationErrorを上がります
Choice: Another choice, Votes: 0
Choice: A choice, Votes: 0
を交換しました。
このようなケースを許可したい場合、どのように検証をコードしますか?それが不可能な場合は、1つのエントリが管理フォームで編集されている場合、他のインラインモデルエントリを編集できないようにすることは可能ですか?