Набор форм Django Model работает частично

Обычно у меня простой вопрос, но я не могу заставить его работать. У меня есть представление, в котором клиенты могут добавлять, удалять или редактировать свои адреса.

view.py:

customer_addresses = CustomerAddresses.objects.filter(CustomerID=customer)
AddressFormSet = modelformset_factory(CustomerAddresses, form=CustomerAddressesForm, extra=0)
formset = AddressFormSet(queryset=customer_addresses, form_kwargs={'user': User.ID})
if request.method == 'POST':
    if 'add_address' in request.POST:
        add_address_form = CustomerAddressesForm(User.ID, request.POST)
        if add_address_form.is_valid():
            add_address_form.save()
    if 'edit_address' in request.POST:
        address_id = request.POST.get('id_Address')
        address_data = CustomerAddresses.objects.get(pk=address_id)
        edit_address_form = AddressFormSet(request.POST, queryset=customer_addresses, form_kwargs={'user': User.ID})
        print('ERROR', edit_address_form.errors)
        messages.error(request, 'ERROR')
        if edit_address_form.is_valid():
            instances = edit_address_form.save(commit=False)
            for instance in instances:
                instance.save()
        return redirect('addresses')
    if 'delete_customer_address_id' in request.POST:
        delete_customer_address_id = request.POST.get('delete_customer_address_id')
        request.session['delete_customer_address_id'] = delete_customer_address_id
        return redirect('delete-customer-address')
    if 'register_customer' in request.POST:
        register_form = CustomerAddressesForm(user=user_id)
        if register_form.is_valid():
            customer = register_form.save(commit=False)
            customer.UserID = user_id
            customer.save()
            # You can redirect to a success page or login the user directly
            redirect(request.META.get('HTTP_REFERER'))
else:
    add_address_form = CustomerAddressesForm(user=User.ID)

и моя форма:

class CustomerAddressesForm(forms.ModelForm):
Title = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control mb-3', 'autofocus': True}),
                        required=False)
Address_Firstname = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control', 'autofocus': True}))
Address_Lastname = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control', 'autofocus': True}))
Zip = forms.IntegerField(
    widget=forms.TextInput(attrs={'class': 'form-control', 'maxlength': '5', 'data-toggle': 'maxlength'}),
    label='Postnummer')
City = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control', 'autofocus': True}))
Address_Company = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control', 'autofocus': True}),
                                  required=False)
Street = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control', 'autofocus': True}), required=False)
Country = forms.ModelChoiceField(widget=forms.Select(attrs={'class': 'form-select'}),
                                 queryset=CountryList.objects.values_list('countryname', flat=True).order_by(
                                     'code'), initial='Denmark', to_field_name='countryname')
Is_Default_Shipping_address = forms.BooleanField(
    widget=forms.CheckboxInput(attrs={'class': 'form-check-input', 'id': 'customSwitch4'}), initial=False,
    required=False)
Is_Default_Billing_address = forms.BooleanField(
    widget=forms.CheckboxInput(attrs={'class': 'form-check-input', 'id': 'customSwitch3'}), initial=False,
    required=False)

class Meta:
    model = CustomerAddresses
    fields = ['Title', 'Address_Firstname', 'Address_Lastname', 'Zip', 'City', 'Address_Company', 'Country',
              'Is_Default_Shipping_address', 'Is_Default_Billing_address', 'Address_CustomerSalutation',
              'CustomerID', 'Street']

def __init__(self, user, *args, **kwargs):
    super(CustomerAddressesForm, self).__init__(*args, **kwargs)
    self.fields['Address_CustomerSalutation'] = forms.ModelChoiceField(
        widget=forms.Select(attrs={'class': 'form-select mb-3'}),
        queryset=Salutation.objects.filter(UserID_id=user), empty_label=None)

Итак, формы генерируются, и я могу открыть форму edit_customer_form, значения заполняются, потому что запрос установлен. Но если я нажимаю на сохранить, форма публикуется, она прыгает в правом цикле: if 'edit_address' in request.POST: но я получил вывод: print('ERROR', edit_address_form.errors)

что все поля обязательны для заполнения, а ввода данных нет. Это странно.

HTML-форма выглядит следующим образом:

<input type="text" name="form-0-Address_Firstname" value="Christopher" class="form-control" autofocus="" id="id_form-0-Address_Firstname">

Ошибка гласит:

ERROR [{'CustomerID': ['Dette felt er påkrævet.'], 'ID': ['Dette felt er påkrævet.']}, {'Address_Firstname': ['Dette felt er påkrævet.'],

В моих глазах имя поля отличается от значения, заданного префиксом, что необходимо. Но как я могу сохранить форму и придать ей значения.

уважает Кристофер.

Я нашел проблему, это было недоразумение, я создал для каждого экземпляра собственный тег <form>, это не работало, потому что

{{ formset.management_form }}

должны быть в форме для всех наборов форм.

Я тоже пробовал

{{ form.instance.management_form }}

и

{{ form.management_form }}

в цикле {% for form in formset %}, но это не помогло. Я также исключил поле CustomerID, потому что оно не будет изменено ни клиентом, ни администратором.

Вернуться на верх