【问题标题】:How to set default value to None for Django choices form field如何将 Django 选择表单字段的默认值设置为无
【发布时间】:2020-07-13 11:05:56
【问题描述】:

下面的 Django 表单有效,但对于我来说,我无法弄清楚如何将 operator 的 ModelChoiceField 设置为空白或默认设置为 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)

查看

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

表格

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',]

【问题讨论】:

    标签: django


    【解决方案1】:

    只要None 是您的选择之一,您就可以:

    form.fields['operator'].initial = None
    

    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
    

    here

    如果没有,那么您可以使用 JavaScript 添加“无”选项并使其被选中。

    【讨论】:

    • 谢谢@Dean Elliot,我确实试过了,不幸的是它并没有将默认值更改为无......它似乎不会以任何方式影响这个字段
    • 我已经更新了答案,因为 None 现在在技术上是一个有效的选择,您可能需要创建一些自定义验证来防止用户使用 None 作为有效选择提交表单(如果该字段不为空),除非您愿意。
    猜你喜欢
    • 2019-06-03
    • 2022-12-05
    • 2020-07-29
    • 1970-01-01
    • 2014-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-28
    相关资源
    最近更新 更多