django-mptt 和 ForeignKey 的 blank=True

0 投票
1 回答
999 浏览
提问于 2025-04-16 21:05

我在我的项目中使用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在下拉框中没有显示'---'这个选项。你有什么建议吗?

1 个回答

1

在创建TreeNodeChoiceField对象的时候,使用required=False

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

Django的表单字段默认是required=True,这意味着不允许值为None,也就是必须提供一个有效的值。

撰写回答