【发布时间】:2013-04-19 04:19:06
【问题描述】:
我有一个自引用的 ForeignKey 字段:
class Thing(models.Model)
special_thing = models.ForeignKey(
'self',
blank=True,
null=True
)
在“添加事物”表单上,除了其他现有事物外,我还需要提供“事物本身”选项,即尚未添加的事物。告诉用户添加然后重新访问该字段不是一种选择。
我该怎么办?
我目前的想法是覆盖表单:
- 将“special_thing”从默认的 ModelChoiceField 更改为 ChoiceField
- 在 __init__() 中的字段选项中添加新的特殊(“标记”)选项“*** THIS THING ***”
- 提供 clean_special_thing(),它允许“*** THIS THING ***”或可以从查询集中查找的事物的 ID。
- 在 save() 中,如果选择“*** THIS THING ***”,则使用 special_thing=None 保存 Thing,然后将其设置为自身并再次保存。否则,通过给定的 id 查找 Thing 并照常保存。
我正在为 ModelAdmin 的 ModelForm 执行此操作。有没有更简单的方法?
【问题讨论】:
标签: django django-forms foreign-keys self-reference