如何过滤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,知道如何将默认值设置为无
?