Django CreateView - 仅为其中一个字段自定义 get_queryset
Django CreateView - custom get_queryset for only one of the fields
我有一个 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>
),允许用户 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
我有一个 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>
),允许用户 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