下面的 Django 表单可以工作,但对于我来说,我无法弄清楚如何将 ModelChoiceField 设为operator空白或设置None为默认值。我希望用户可以选择将此选择字段设置为None。这会自动填充用户列表中的第一个用户。
模型
class Build(models.Model):
PSScustomer = models.ForeignKey(Customer, on_delete=models.CASCADE)
author = models.ForeignKey(get_user_model(),related_name='+',on_delete=models.CASCADE,blank=True, null= True,)
plannedAuthor = models.ForeignKey(CustomUser,related_name='+',blank=True, null= True, on_delete=models.CASCADE)
status = models.CharField(max_length=100,blank=True,)
operator = models.ForeignKey(CustomUser,related_name='+',blank=True, null= True, on_delete=models.CASCADE, default=None)
Run Code Online (Sandbox Code Playgroud)
看法
class queuedBuild_CreateView(LoginRequiredMixin,CreateView):
model = Build
form_class = queuedBuild_Creation_Form
template_name = 'addQueuedBuild.html'
login_url = 'login'
success_url = reverse_lazy('equipmentdashboard')
def get_form(self, form_class=None):
form = super().get_form(form_class)
customer = self.request.user.PSScustomer
form.fields['operator'].choices = [(item.id, item.first_name) for item in CustomUser.objects.filter(isDevice=False, PSScustomer = customer)]
return form
Run Code Online (Sandbox Code Playgroud)
形式
class queuedBuild_Creation_Form(forms.ModelForm):
buildDescrip = forms.ModelChoiceField(initial='Your name')
def __init__(self, *args, **kwargs):
super(queuedBuild_Creation_Form, self).__init__(*args, **kwargs)
self.fields['status'].required = True
class Meta:
model = Build
fields = ['status', 'operator',]
Run Code Online (Sandbox Code Playgroud)
只要None是您的选择之一,您就可以这样做:
form.fields['operator'].initial = None
Run Code Online (Sandbox Code Playgroud)
或者
choices = [(item.id, item.first_name) for item in CustomUser.objects.filter(isDevice=False, PSScustomer = customer)]
choices.insert(0, ('', 'None'))
form.fields['operator'].choices = choices
Run Code Online (Sandbox Code Playgroud)
看这里。
如果没有,那么您可以使用 JavaScript 添加“无”选项并将其选中。
| 归档时间: |
|
| 查看次数: |
7265 次 |
| 最近记录: |