如何将 Django 选择表单字段的默认值设置为 None

Mat*_*ttG 1 django

下面的 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)

Dea*_*ott 6

只要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 添加“无”选项并将其选中。