Частичное обновление расширенного профиля пользователя
У меня есть расширение модели пользователя в 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}}
в вашем шаблоне для дальнейшей отладки.