ChatGPT解决这个技术问题 Extra ChatGPT

我可以在不创建表单的情况下创建 Django 中不需要的管理字段吗?

每次我在 Django 的管理部分输入一个新播放器时,我都会收到一条错误消息,上面写着“此字段是必需的。”。

有没有一种方法可以使字段不需要创建而无需创建自定义表单?我可以在 models.py 或 admin.py 中执行此操作吗?

这是我在 models.py 中的类的样子。

class PlayerStat(models.Model):
    player = models.ForeignKey(Player)

    rushing_attempts = models.CharField(
        max_length = 100,
        verbose_name = "Rushing Attempts"
        )
    rushing_yards = models.CharField(
        max_length = 100,
        verbose_name = "Rushing Yards"
        )
    rushing_touchdowns = models.CharField(
        max_length = 100,
        verbose_name = "Rushing Touchdowns"
        )
    passing_attempts = models.CharField(
        max_length = 100,
        verbose_name = "Passing Attempts"
        )

谢谢

最简单的方法是使用字段选项空白=True (docs.djangoproject.com/en/dev/ref/models/fields/#blank)。有没有理由不工作?

f
fabrizioM

只是放

blank=True

在您的模型中,即:

rushing_attempts = models.CharField(
        max_length = 100,
        verbose_name = "Rushing Attempts",
        blank=True
        )

请注意,如果您使用“表单”,则 blank=true 将不起作用。例如,模型中的 blank=true 将不起作用: class MusModelForm( forms.ModelForm ): name = forms.CharField( widget=forms.Textarea ) #~ mitglieder = forms.CharField( widget=forms.Textarea ) class Meta:模型 = 音乐家
如果该字段在模型级别设置为空白,这实际上意味着允许空字符串。空字符串和 null 真的不是一回事。不要仅仅因为框架设置了一些不好的默认特性就破坏了你的数据完整性。不要设置空白,而是覆盖 get_form -方法:stackoverflow.com/a/70212909/784642
D
Dawn T Cherian

使用空白=真,空=真

class PlayerStat(models.Model):
    player = models.ForeignKey(Player)

    rushing_attempts = models.CharField(
        max_length = 100,
        verbose_name = "Rushing Attempts",
        blank=True,
        null=True
        )
    rushing_yards = models.CharField(
        max_length = 100,
        verbose_name = "Rushing Yards",
        blank=True,
        null=True
        )
    rushing_touchdowns = models.CharField(
        max_length = 100,
        verbose_name = "Rushing Touchdowns",
        blank=True,
        null=True
        )
    passing_attempts = models.CharField(
        max_length = 100,
        verbose_name = "Passing Attempts",
        blank=True,
        null=True
        )

至少从 Django 1.6 开始,您不应该在 CharFields 上需要“null=True”,甚至可能更早。类似地,对于 TextField、SlugField、EmailField 等任何存储为文本的内容。
对于严格包含文本的字段,Django 不建议使用“null=True”。
@Paullo “避免在基于字符串的字段(例如 CharField 和 TextField)上使用 null。如果基于字符串的字段具有 null=True,这意味着它有两个可能的“无数据”值:NULL 和空字符串。在大多数情况下在这种情况下,“无数据”有两个可能的值是多余的; Django 约定是使用空字符串,而不是 NULL。一个例外是当 CharField 同时设置了 unique=True 和 blank=True 时。在这种情况下,需要 null=True 以避免在使用空白保存多个对象时违反唯一约束价值观。” docs.djangoproject.com/en/2.1/ref/models/fields/#null
虽然这个理由对我来说没有说服力。 :)
@MassoodKhaari 我明白你的意思,我同意你的观点,即“理由不可信”。
n
niko.makela

如果该字段在模型级别设置为空白,这实际上意味着允许空字符串。空字符串和 null 真的不是一回事。不要仅仅因为框架设置了一些不好的默认特性就破坏了你的数据完整性。

而不是设置空白,覆盖 get_form -方法:

    def get_form(self, request, obj=None, **kwargs):
        form = super().get_form(request, obj, **kwargs)
        form.base_fields["rushing_attempts"].required = False

没有得到足够的回答 - 解释它是如何实际使用的,为什么使用 super()? django新手看不懂答案

关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅