2016-05-27 2 views
0

Я рассмотрел все подобные вопросы, но ни один из них, похоже, не помогает.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) 
+1

Я не понимаю, почему вы вручную берете все данные из 'form.cleaned_data' и вручную сохраняете их? Почему вы не можете просто вызвать 'updated = form.save()'? –

+0

попробовал это тоже, все еще не работал :( –

+0

@ShangWang имеет атрибут «instance» в 'form = EditProfileForm (request.POST, request.FILES, instance = user_detail)' что-нибудь связанное с этой проблемой? –

ответ

1

Если EditProfileForm редактирует UserDetail, то instance должен быть UserDetail экземпляр. Вы в настоящее время передаете user. Попробуйте изменить его на:

def post(self, request, *args, **kwargs): 
    user_id = kwargs.get('pk') 
    user_detail = User.objects.get(id=user_id) 
    user_detail = user.userdetail 

    form = EditProfileForm(request.POST, request.FILES, instance=user_detail) 
+0

спасибо, я возился с' User' и 'UserDetail «Я использовал« model = User ». Во всяком случае, это работа g сейчас. :) –

Смежные вопросы