Отклонение частично заполненной формы в ModelFormSet с полем ManytoMany - PullRequest
0 голосов
/ 19 июня 2019

У меня есть Modelformset, который содержит множество полей. Поле M2M отображается как ModelMultipleChoiceField.

Все работает нормально, когда все формы заполнены.

Короче говоря, единственный пользовательский ввод, который я получаю, от флажков на каждой форме набора форм. Есть и другие поля, но они предварительно заполнены пользовательскими данными.

Я хочу сохранить формы, на которых установлен флажок, и игнорировать формы, из которых ни одна не выбрана.

Мне удалось получить частично заполненные формы для прохождения проверки, поэтому все формы сохранены, но мне трудно написать тест, который отбрасывает частично заполненную форму (из которой не выбраны флажки) ,

Models.py

    customer_id = models.ForeignKey(CustomerDB, on_delete=models.CASCADE, default=None)
    services_manytomany = models.ManyToManyField(ContractorServices, blank=True)

class ContractorServices(models.Model):
    service_parent = models.ForeignKey(User, on_delete=models.CASCADE, default=None)
    service_name = models.CharField(max_length=150, null=True, blank=True)
    archive = models.BooleanField(default=False, null=True)

    def __str__(self):
        return self.service_name

forms.py

    services_manytomany = forms.ModelMultipleChoiceField(
        widget=forms.CheckboxSelectMultiple,
        queryset=ContractorServices.objects.all()
    )

    def __init__(self, user, *args, **kwargs):
        super(AddJob, self).__init__(*args, **kwargs)
        self.helper = FormHelper()
        self.helper.form_show_labels = False
        self.helper.form_show_errors = True
        self.helper.form_tag = False
        self.fields['services_manytomany'].required = False

        if user is not None:
            self.fields['services_manytomany'].queryset = ContractorServices.objects.filter(service_parent=user)

    class Meta:
        model = Jobs_DB
        fields = {'services_manytomany', 'frequency'}

Соответствующий код view.py


    formset = job_formset(queryset=Jobs_DB.objects.none(), form_kwargs={'user': request.user})

    if request.method == 'POST':
        form_a = AddJob(request.user, request.POST)
        formset = job_formset(request.POST, form_kwargs={'user': request.user})
        if formset.is_valid():
            instances = formset.save(commit=False)
            for instance in instances:
                instance.customer_id = CustomerDB.objects.get(pk=customer_id)
                instance.save()
            formset.save_m2m()
...