Django CreateView - 仅为其中一个字段自定义 get_queryset

标签 django django-class-based-views

我有一个 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']

问题是在 MissionCreateView页面容器按创建时间排序,我希望它们按名称排序。

我应该在哪里覆盖 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/

相关文章:

django - 如何在docker中将postgis连接到django

django - 使用 django-storages 和 s3boto 后端 : x-amz-security-token is appended which I do not want

Django buggy 模板标签 - 'NoneType' 对象没有属性 'source'

python - 基于 Django 类的 View : Validate object in dispatch

基于 Django 类的通用 View 和 ModelForms

python - 字符串作为 CBV 的 url 调度程序中的第二个参数

django - 使用 LDAP 身份验证但使用 ModelBackend 授权

django - 使用SQLite使用OneToOneField加载Django固定装置时发生IntegrityError

python - 努力理解基于 django 类的 View 代码

django - 在基于类的通用 View CreateView 中访问 request.user 以便在 Django 中设置 FK 字段