Я рассмотрел все подобные вопросы, но ни один из них, похоже, не помогает.ModelForm не сохраняет данные в модели
Это мой POST
метод внутри class ProfileEditView(generic.DetailView):
def post(self, request, *args, **kwargs):
profile_id = kwargs.get('pk')
user_detail = User.objects.get(id=profile_id)
form = EditProfileForm(request.POST, request.FILES, instance=user_detail)
if form.is_valid():
updated = form.save(commit=False)
updated.phone = form.cleaned_data["phone"]
updated.address = form.cleaned_data["address"]
updated.gender = form.cleaned_data["gender"]
updated.save()
messages.success(request, "Profile details updated.")
return redirect("profileview", profile_id)
else:
context = {}
context["form"] = form
context["profile_id"] = kwargs["pk"]
return render(request, self.template_name, context)
Шаблон:
<form enctype="multipart/form-data" method="POST" action="{% url 'profile_edit_view' profile_id %}">
{% csrf_token %}
{{form|crispy}}
<input type="submit" value="Save">
</form>
Models.py
class UserDetail(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL)
profile_picture = models.FileField(upload_to=profile_image_upload, null=True, blank=True)
phone = models.CharField(max_length=10)
address = models.CharField(max_length=1000)
gender = models.CharField(max_length = 10, choices=gender_choices)
Я не понимаю, почему вы вручную берете все данные из 'form.cleaned_data' и вручную сохраняете их? Почему вы не можете просто вызвать 'updated = form.save()'? –
попробовал это тоже, все еще не работал :( –
@ShangWang имеет атрибут «instance» в 'form = EditProfileForm (request.POST, request.FILES, instance = user_detail)' что-нибудь связанное с этой проблемой? –