有一种方法可以使用ModelAdmin 对象来指定您自己的表单。通过指定您自己的表单,您可以完全控制表单的组成和验证。
假设具有 FK 的模型User
是Foo
。
你myapp/models.py
可能看起来像这样:
from django.db import models
from django.contrib.auth.models import User
class Foo(models.Model):
user = models.ForeignKey(User)
some_val = models.IntegerField()
然后,您将创建一个myapp/admin.py
包含以下内容的文件:
from django.contrib.auth.models import User
from django import forms
from django.contrib import admin
class FooAdminForm(forms.ModelForm):
user = forms.ModelChoiceField(queryset=User.objects.order_by('username'))
class Meta:
model = Foo
class FooAdmin(admin.ModelAdmin):
form = FooAdminForm
admin.site.register(Foo, FooAdmin)
完成此操作后,<select>
下拉列表将根据用户名对用户对象进行排序。无需担心Foo
...上的其他字段,您只需要在FooAdminForm
类中指定覆盖。不幸的是,您需要为每个模型提供此自定义表单定义,该模型具有您希望在管理站点中显示的用户的 FK。