gpt4 book ai didi

django - 如何为 Django Admin 创建复杂的 Django 模型验证?

转载 作者:行者123 更新时间:2023-12-01 05:43:55 25 4
gpt4 key购买 nike

我在 Django 中有以下模型:

class Bout (models.Model):
fighter_1 = models.ForeignKey(Fighter, related_name="bout_fighter_1")
fighter_2 = models.ForeignKey(Fighter, related_name="bout_fighter_2")
winner = models.ForeignKey(Fighter, related_name="bout_winner",
blank=True, null=True, help_text='Leave blank for draw.')
date = models.DateField()
cancelled = models.BooleanField()

我想为政府的记录“证明白痴”。顺便说一句,我想创建三个规则:
  • 战斗机 1 与战斗机 2 不同(仅适用于 python 短剧)。
  • 获胜者应该在比赛中(即战斗机 1 或战斗机 2)
  • 比赛开始前无法确定获胜者。 (毕竟,这不是 WWE。)

  • 所有这三个规则都要求根据同一记录中的另一个字段检查一个字段。是否可以在 django 中执行此操作,使用 native django 方法或求助于 python?

    最佳答案

    简短回答:您可以使用“原生 django 方法”在 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 的新花样 form validators .

    另一方面,如果您的用户可以使用 API 创建实例(例如,通过在他们的程序中实例化 Bout 类),那么您必须通过覆盖 save() 来进行验证。 Bout的方法类(class)。

    关于django - 如何为 Django Admin 创建复杂的 Django 模型验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3541201/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com