Django模型OneToOneField:管理员中的“此字段是必需的”错误

Posted

技术标签:

【中文标题】Django模型OneToOneField:管理员中的“此字段是必需的”错误【英文标题】:Django model OneToOneField : "This field is required" error in admin 【发布时间】:2017-06-05 20:00:36 【问题描述】:

当我在 Admin 中打开“Placerating”条目,并在对任何字段进行更改后尝试保存它时,Django admin 在“Pic”字段上方显示“此字段是必需的”。

class Placerating(models.Model):
    theplace = models.ForeignKey('ThePlace', on_delete=models.CASCADE, null=True, related_name='placeratings')
    pic = models.OneToOneField('fileupload.Picture', on_delete=models.SET_NULL, null=True)
    def __unicode__(self):
            return self.theplace.name

class Picture(models.Model):
    def set_upload_to_info(self, path, name):
        self.upload_to_info = (path, name)
    file = ImageField(max_length=500, upload_to=user_directory_path)
    def filename(self):
        return os.path.basename(self.file.name)
    theplace = models.ForeignKey(ThePlace, null=True, blank=True, related_name='pictures')
    def __unicode__(self):
        return str(self.id)
    def save(self, *args, **kwargs):
        super(Picture, self).save(*args, **kwargs)

我用表单创建条目没有问题,所以我不明白为什么管理员现在会要求填写此字段。

【问题讨论】:

【参考方案1】:

从docs 关于null 参数到模型字段:

对于基于字符串和非基于字符串的字段,您还需要 如果您希望在表单中允许空值,则设置 blank=True,因为 null 参数只影响数据库存储(见blank)。

管理员使用表单进行创建和编辑,因此您需要在希望能够在管理员中留空的字段中填写blank=True

【讨论】:

以上是关于Django模型OneToOneField:管理员中的“此字段是必需的”错误的主要内容,如果未能解决你的问题,请参考以下文章

带有模型 OneToOneField 的 django-jquery-file-upload

十一 .Django 一对一表OneToOneField (ORM)

Django模型中的OneToOneField和ForeignKey有啥区别

Django模型中的OneToOneField和ForeignKey有什么区别?

Django Python 3.x - 用ContentTypes覆盖OneToOneField的delete()。

隐藏但需要 OneToOneField 的 Django 创建 ModelForm