想象一下,我们有一个这样的模型:
class Container(models.Model):
name = models.CharField(max_length=60)
class Element(models.Model):
container = models.ForeignKey(Container, blank=True, null=True)
Container
是One,Element
是众多。
在Django admin中,如果我将StackedInline
model=Element
添加到inlines
模型管理员的Container
:
class Inline(admin.StackedInline):
model = Element
class ContainerAdmin(admin.ModelAdmin):
inlines = (Inline,)
admin.site.register(Container, ContainerAdmin)
我最终获得了一个formset,允许我在添加容器表单中输入新 Element
个对象。
相反,我希望获得一个选择小部件,以选择现有 Element
个对象。
这是否可以在不引入额外模型的情况下实现?
答案 0 :(得分:3)
我认为你应该能够这样做:
class ContainerAdminForm(forms.ModelForm):
class Meta:
model = Container
fields = ('name',)
element_set = forms.ModelMultipleChoiceField(queryset=Element.objects.all())
class ContainerAdmin(admin.ModelAdmin):
form = ContainerAdminForm
# register and whatnot
我不知道我的项目中有这样的东西,但如果我发现了什么,我会告诉你的。您可能还必须覆盖表单上的save()
方法,以便实际保存选定的Element
;我不知道命名字段element_set
(或反向关系的名称)是否足够。