我有一个“注册”对象,用户可以在前端毫无问题地创建它。
它看起来像这样:
class Registration(models.Model):
person = models.ForeignKey(Person, on_delete=models.PROTECT)
course_detail = models.ForeignKey(CourseDetail, on_delete=models.PROTECT)
camp_shirt = models.ForeignKey(CampShirt, on_delete=models.PROTECT)
comments = models.CharField(max_length=200, blank=True, null=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return "%s" % (self.course_detail.course.camp)
当我在管理员中并单击给定的注册时-加载需要一段时间,因为有成千上万的 Person 对象。
为了便于使用 - 我们永远不会需要编辑与给定注册关联的“人”,所以我想让“人”下拉列表在编辑时只显示人查询集中的选定用户django 管理员。
所以当我去时,http://myapp.com/admin/registration/23/change
我希望表单只显示当前选择的人作为下拉列表中的唯一选项。
我的管理模型如下所示:
class RegistrationAdmin(admin.ModelAdmin):
list_display = ("person", "course_detail")
class Meta:
# I think this is what I do in order to override the default admin form? Not sure.
form = RegistrationAdminForm
我的 RegistrationAdminForm 看起来像这样:
class RegistrationAdminForm(forms.ModelForm):
# course_detail, person, camp_shirt, comments
person = forms.ModelChoiceField(queryset=Person.objects.filter(
id=registration.person.id)
)
def __init__(self, registration, *args, **kwargs):
super(RegistrationAdminForm, self).__init__(*args, **kwargs)
self.fields['person'].queryset = Person.objects.filter(
id=registration.person.id
)
class Meta:
model = Registration
fields = '__all__'
Main Question : How do I change the admin form so that a specific queryset is returned for one of the fields in the django admin?