我有一个 Mission
包含 Vessel
外键的模型模型,即
class Vessel(models.Model):
name = models.CharField(max_length=256)
class Mission(models.Model):
title = models.CharField(max_length=256, null=False, blank=False)
vessel = models.ForeignKey(to=Vessel, related_name='vessels')
status = models.IntegerField(choices=((1, 'In progress'),
(2, 'Success'),
(3, 'Partial success'),
(4, 'Failure')))
我正在使用 CreateView
轻松让用户创建船只和任务对象。关于Mission
CreateView
页面上有一个下拉列表 ( <select>
),可让用户选择现有容器。
观看次数:
class VesselCreate(CreateView):
model = Vessel
fields = ['name']
class MissionCreate(CreateView):
model = Mission
fields = ['title', 'vessel', 'status']
问题是在 Mission
上CreateView
页面容器按创建时间排序,我希望它们按名称排序。
我应该在哪里覆盖 get_queryset
方法(如果有的话)?我试过几个地方,但他们没有改变 <select>
中船只的顺序。 .
最佳答案
您要在此处覆盖的不是 get_queryset
。相反,您需要创建一个表单,并在 Vessel 字段上定义一个自定义查询集:
class MissionForm(forms.ModelForm):
vessel = forms.ModelChoiceField(queryset=Vessel.objects.all().order_by('name'))
class Meta:
model = Mission
fields = ['title', 'vessel', 'status']
class MissionCreate(CreateView):
form_class = MissionForm
model = Mission
关于Django CreateView - 仅为其中一个字段自定义 get_queryset,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37074866/