如何过滤Django';s外键窗体下拉列表

如何过滤Django';s外键窗体下拉列表,django,Django,我有一个用于编辑(更新)记录的表单,Author字段自动成为一个下拉列表,这很好,但是如何筛选此列表? 例如,下拉列表将填充整个用户列表。如何筛选此列表,使其仅显示isDevice==True的项目 客户/型号.py from django.contrib.auth.models import AbstractUser class CustomUser(AbstractUser): isDevice = models.BooleanField(default = False)

我有一个用于编辑(更新)记录的表单,
Author
字段自动成为一个下拉列表,这很好,但是如何筛选此列表? 例如,下拉列表将填充整个用户列表。如何筛选此列表,使其仅显示
isDevice==True
的项目

客户/型号.py

from django.contrib.auth.models import AbstractUser

class CustomUser(AbstractUser):
    isDevice = models.BooleanField(default = False)
    ...
class BuildQueue(models.Model):
    Author =  models.ForeignKey(CustomUser,blank=True, null= True, on_delete=models.CASCADE)
    ...
class BuildQueueEditForm(forms.ModelForm):
    class Meta:
        model = BuildQueue
        fields = ['Author','project', 'customer',]
class buildQueueEdit(LoginRequiredMixin,UpdateView):
    model = BuildQueue
    form_class = BuildQueueEditForm
    template_name = 'buildQueue_edit.html'
构建/模型.py

from django.contrib.auth.models import AbstractUser

class CustomUser(AbstractUser):
    isDevice = models.BooleanField(default = False)
    ...
class BuildQueue(models.Model):
    Author =  models.ForeignKey(CustomUser,blank=True, null= True, on_delete=models.CASCADE)
    ...
class BuildQueueEditForm(forms.ModelForm):
    class Meta:
        model = BuildQueue
        fields = ['Author','project', 'customer',]
class buildQueueEdit(LoginRequiredMixin,UpdateView):
    model = BuildQueue
    form_class = BuildQueueEditForm
    template_name = 'buildQueue_edit.html'
forms.py

from django.contrib.auth.models import AbstractUser

class CustomUser(AbstractUser):
    isDevice = models.BooleanField(default = False)
    ...
class BuildQueue(models.Model):
    Author =  models.ForeignKey(CustomUser,blank=True, null= True, on_delete=models.CASCADE)
    ...
class BuildQueueEditForm(forms.ModelForm):
    class Meta:
        model = BuildQueue
        fields = ['Author','project', 'customer',]
class buildQueueEdit(LoginRequiredMixin,UpdateView):
    model = BuildQueue
    form_class = BuildQueueEditForm
    template_name = 'buildQueue_edit.html'
视图.py

from django.contrib.auth.models import AbstractUser

class CustomUser(AbstractUser):
    isDevice = models.BooleanField(default = False)
    ...
class BuildQueue(models.Model):
    Author =  models.ForeignKey(CustomUser,blank=True, null= True, on_delete=models.CASCADE)
    ...
class BuildQueueEditForm(forms.ModelForm):
    class Meta:
        model = BuildQueue
        fields = ['Author','project', 'customer',]
class buildQueueEdit(LoginRequiredMixin,UpdateView):
    model = BuildQueue
    form_class = BuildQueueEditForm
    template_name = 'buildQueue_edit.html'

由于
UpdateView
也继承自
FormMixin
,因此在
buildQueueEdit
中,您可以覆盖表单实例化的位置以及修改表单字段的
queryset
的确切位置

class buildQueueEdit(LoginRequiredMixin,UpdateView):
    model = BuildQueue
    form_class = BuildQueueEditForm
    template_name = 'buildQueue_edit.html'

    def get_form(self, form_class=None):
        form = super().get_form(form_class)
        form.fields['Author'].queryset = CustomUser.objects.filter(isDevice=True)
        return form
更新

如果要更改下拉列表中显示的文本,可以覆盖
选项
,而不是
查询集
。这对我有用

form.fields['Author'].choices = [(item.id, item.equipmentName) for item in CustomUser.objects.filter(isDevice=True)]

成功了,谢谢您知道我现在如何更改下拉列表中的属性吗?它默认为用户名。我尝试对查询中的项使用类似于
query=CustomUser.objects.filter(isDevice=True)的for循环:form.fields['plannedAuthor'].queryset=item.equipmentName返回表单
它返回
“str”对象没有属性“all”
嘿@mrevgenx,知道如何将默认值设置为