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
。现在试试看。