【问题标题】:django-mptt and ForeignKey with blank=Truedjango-mptt 和 ForeignKey 与空白 = True
【发布时间】:2011-07-08 11:10:50
【问题描述】:

我在我的项目中使用 django-mptt

models.py:

class Category(models.Model):
    name = models.TextField()
    parent = models.ForeignKey("self", blank=True, null=True,
                               related_name="sub_category")
    image = models.ImageField(upload_to="categories", blank=True)

mptt.register(Category)

admin.py:

class CategoryAdmin(MPTTModelAdmin):
    def formfield_for_dbfield(self, db_field, **kwargs):
        if db_field.name == 'parent':
            field = TreeNodeChoiceField(
                                        queryset=Category.objects.all(),
                                        level_indicator = u'+--',
                                                )
        else:
            field = super(CategoryAdmin, self).formfield_for_dbfield(
                                                  db_field, **kwargs)
        return field

admin.site.register(Category, CategoryAdmin)

问题是——我不能选择没有父级,TreeNodeChoiceField 在选择中没有显示'---'。 你能推荐什么?

【问题讨论】:

    标签: python django foreign-keys mptt


    【解决方案1】:

    在初始化 TreeNodeChoiceField 对象时使用required=False

    field = TreeNodeChoiceField(
                                required=False,
                                queryset=Category.objects.all(),
                                level_indicator = u'+--',
                                        )
    

    Django 表单字段默认为required=True,在这种情况下,这意味着不允许 None 作为值。

    【讨论】:

    • 它有效。但对我来说似乎很奇怪。为什么需要不取自blank=True
    • @Ideviantik blank=Truenull=TrueModel 字段上的值。您定义了不知道ModelForm 字段。通常 ModelFormModelAdmin 会根据使用的 Model 为该字段传递构造函数参数,但在您的代码中,您将使用自定义字段覆盖它。方法formfield_for_dbfield 接受参数db_fieldkwargskwargs 是 Django 想要传递给字段构造函数的所有关键字参数的字典。检查kwargs 的内容以获取required=True 和您可能遗漏的其他参数。
    猜你喜欢
    • 2017-03-07
    • 2011-10-30
    • 1970-01-01
    • 2012-03-22
    • 2016-01-23
    • 2013-01-19
    • 1970-01-01
    • 2012-12-31
    相关资源
    最近更新 更多