Django CreateView-仅为其中一个字段自定义get_queryset
我有一个Django CreateView-仅为其中一个字段自定义get_queryset,django,django-class-based-views,Django,Django Class Based Views,我有一个任务模型,其中包含一个船只模型的外键,即 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_nam
任务
模型,其中包含一个船只
模型的外键,即
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
让用户轻松创建船只和任务对象。在任务
创建视图
页面上,有一个下拉列表(
),允许用户选择现有船只
观点:
class VesselCreate(CreateView):
model = Vessel
fields = ['name']
class MissionCreate(CreateView):
model = Mission
fields = ['title', 'vessel', 'status']
问题是在任务
创建视图
页面上,船只是按创建时间订购的,我希望它们是按名称订购的
我应该在哪里重写
get\u queryset
方法(如果有)?我尝试了几个地方,但是他们没有改变
中的船只顺序。您不想在这里覆盖获取查询集。相反,您需要创建一个表单,并在Vesser字段上定义一个自定义查询集:
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
谢谢,但最后会出现一个错误:MissionCreate缺少一个QuerySet。定义MissionCreate.model、MissionCreate.queryset或覆盖MissionCreate.get_queryset()。
因此我继续添加了model=Mission
到MissionCreate
,然后投诉使用ModelFormMixin(MissionCreate的基类)而没有“fields”属性是被禁止的。
。当我在任务创建中添加字段=['title'、'vessel'、'status']
时,我没有得到任何异常,但船只的顺序没有变化。很抱歉,需要将model=Mission
添加到表单元类中。这样更好吗?我不害怕,回到缺失的QuerySet
异常。它可能与django的版本1.9.6有关吗?啊,抱歉,它应该是视图中的form\u class
。现在试试看。