Частичное обновление расширенного профиля пользователя

У меня есть расширение модели пользователя в Django, добавляющее несколько полей к обычному профилю пользователя. Для того чтобы пользователь мог их изменить, я создал форму, которая должна иметь возможность изменять эти поля, но безуспешно...

models.py

class UserProfileModel(models.Model):
    user = models.OneToOneField(User, null=True, on_delete=models.CASCADE)
    agency_name = models.CharField(max_length=255, null=True)
    license_number = models.CharField(max_length=10, null=True)
    phone = models.CharField(max_length=10, null=True)
    phone2 = models.CharField(max_length=10, null=True)
    fax = models.CharField(max_length=10, null=True)
    address = models.CharField(max_length=255, null=True)
    city = models.CharField(max_length=255, null=True)
    zip_code = models.CharField(max_length=10, null=True)
    about = models.CharField(max_length=255, null=True)
    # חפ
    pi_id = models.CharField(max_length=10, null=True)
    reason_pension = models.CharField(max_length=255, null=True)
    reason_policy = models.CharField(max_length=255, null=True)
    reason_gemel = models.CharField(max_length=255, null=True)
    reason_hishtalmot = models.CharField(max_length=255, null=True)
 
    def __str__(self):
        return str(self.user)
    
    class Meta:
        ordering = ('user',)

forms.py

views.py


@login_required(login_url="/login/")
def agent_profile(request):
    user_id =  request.user.id
    msg = None
    success = False
    user = UserProfileModel.objects.get(user_id=user_id)
    print(type(user))
    print(user.user_id)
    print(user.reason_hishtalmot)
    context = {}
    load_template = request.path.split('/')[-1]
    context['segment'] = load_template
    if request.method == "POST":
        print("New POST request")
        print(request.POST)
        form = AgentProfileEdit(request.POST, instance=user)
        print(form.data)
        if form.is_valid():
            form.save()
            msg = 'WOWOWOWOWW'
            success = True
            print(msg)
            return HttpResponseRedirect("/agent_profile.html")

        else:
            msg = 'Form is not valid'
            print(msg)
    else:
        print(msg)
        print("Im here")
        form = AgentProfileEdit()

    return render(request, "home/agent_profile.html", {"form": form, "msg": msg, "success": success})

валидация формы не проходит каждый раз, даже если информация о пользователе верна

пробовал использовать instance=user (и любые другие атрибуты из него).

Похоже, что вы заполняете только одно поле в форме, которая требует заполнения всех полей. Однако ваша модель не исключает пустые значения, только нулевые. Если вы хотите, чтобы они принимали пустые поля из форм, то вам нужно использовать blank=True, а не null = True.

Дополнительно вы, вероятно, захотите включить экземпляр и в форму по умолчанию.

else:
    print(msg)
    print("Im here")
    form = AgentProfileEdit(instance = user)

Это означает, что все поля, которые не пусты в БД, предварительно заполнены (и не будут заменены пустыми, если вы введете только одно поле.

).

Не забывайте, что вы также можете использовать {{form.errors}} и {{form.non_field_errors}} в вашем шаблоне для дальнейшей отладки.

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