Как установить значение по умолчанию Нет для поля формы выбора Django - PullRequest
0 голосов
/ 01 апреля 2020

Форма ниже 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)

Вид

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

1 Ответ

1 голос
/ 01 апреля 2020

Пока вы можете сделать 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

См. здесь .

Если нет, то вы можете использовать JavaScript, чтобы добавить вариант «Нет» и сделать его выбранным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...