2

模型.py

class Lab(Model):
    professor = ForeignKey('Author')

管理员.py

class LabAdmin(ModelAdmin):
    form = LabForm

register(Lab, LabAdmin)

表格.py

class LabForm(ModelForm):
    professor = ModelChoiceField(Author.objects.order_by('name'))

    class Meta:
        model = Lab

情况:我不得不为管理员使用自定义表单,因为教授下拉列表的条目没有按字母顺序排列。

问题:因此,下拉列表后不再有绿色的小“+”按钮,以便在实验室添加管理表单时直接添加(在弹出窗口中)教授。Django 通常会自动创建绿色按钮和表单,但由于我使用自定义表单,它就消失了。

请求:我想要在教授下拉列表后面的这个绿色的小“+”按钮。

4

1 回答 1

3

并没有真正回答为什么缺少添加按钮,但无论如何:您不需要自定义表单来覆盖作者表单字段的查询集,您只需要覆盖ModelAdmin.formfield_for_foreignkey

class LabAdmin(ModelAdmin):
    # form = LabForm

    def formfield_for_foreignkey(self, db_field, request, **kwargs):
        if db_field.name == "professor":
            kwargs["queryset"] = Author.objects.order_by("name")
        return super(MyModelAdmin, self).formfield_for_foreignkey(
            db_field, request, **kwargs
            )

或者您可以将“名称”设置为Author.

于 2013-04-22T07:46:16.390 回答