我有一个“注册”对象,用户可以在前端创建它,而不会出现问题。
它看起来像这样:
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__'
主要问题:如何更改admin表单,以便为django admin中的一个字段返回特定的查询集?