2016-12-04 15 views
0

私は既存のユーザーの編集フォームを作成しようとしています。私はUserモデルを持っていて、プロファイルに関連付けました。 問題は、レンダリングされたhtmlでプロファイルのフィールドが空であることです。ただし、新しいユーザーを作成したときにこれらのフィールドを入力しました。管理に入ると、フィールドが埋め込まれています。
enter image description here models.py編集フォームでデータを取得できません

from django.db import models 
from django.contrib.auth.models import User 


class Profile(models.Model): 
    DEPARTMENT_CHOICES = (('MI', 'Math et info'), 
          ('ST', 'Science et Tech'), 
          ('SM', 'Science de la matiere')) 

    user = models.OneToOneField(User, on_delete=models.CASCADE) 
    teacher = models.BooleanField(default=False) 
    description = models.TextField(blank=True) 
    department = models.CharField(max_length=35, choices=DEPARTMENT_CHOICES, blank=True) 
    picture = models.ImageField(upload_to='profile-images', blank=True) 

    def __str__(self): 
     return self.user.username 


views.py

def profile_view(request): 
    if request.method == 'POST': 
     user_form = EditUserForm(request.POST, instance=request.user) 
     ins = Profile.objects.get(pk=5) 
     profile_form = EditProfileForm(request.POST, request.FILES, instance=ins) 

     if user_form.is_valid() and profile_form.is_valid(): 
      user = user_form.save() 
      user.save() 

      profile = profile_form.save(commit=False) 
      profile.user = user 

      if 'picture' in request.FILES: 
       profile.picture = request.FILES['picture'] 

      profile.save() 
      return redirect(home) 
    else: 
     user_form = EditUserForm(instance=request.user) 
     profile_form = EditProfileForm(request.FILES, instance=request.user) 

    return render(request, 'account/profile.html', {'user_form': user_form, 
                'profile_form': profile_form}) 


forms.py

class EditProfileForm(forms.ModelForm): 

    class Meta: 
     model = Profile 
     fields = ('description', 'department', 'picture',) 


class EditUserForm(forms.ModelForm): 

    class Meta: 
     model = User 
     fields = ('username', 'email',) 


profile.html

{% extends 'manhal/base.html' %} 
{% load staticfiles %} 
{% load crispy_forms_tags %} 

{% block content %} 

    <div class="col-md-6"> 

      <form method="post" enctype="multipart/form-data" action="{% url 'profile' %}" class="form-horizontal">{% csrf_token %} 

       <fieldset> 
        <legend>User Profile</legend> 

        {{ user_form|crispy }} 
        {{ profile_form|crispy}} 
        <input type="submit" value="Save" class="btn btn-primary"> 
       </fieldset> 
      </form> 

    </div> 
{% endblock %} 
+1

elseブロックにrequest.POSTを渡さないでください。 –

+0

はまだ動作しません –

答えて

1

最初に、if/elseブロックが、リクエストがPOSTであるかどうかを確認しています。 elseブロックはPOSTではないため、フォームにPOSTデータを渡す必要はありません。これは、フォームがデータなしでバインドされていると思うようにします。あなたは、インスタンスとしてあなたProfileFormrequest.userを渡しているが、ProfileFormメタクラスのモデルがProfileオブジェクトを期待しているよう

また、それが見えます。

これらの2つのものを修正して動作するかどうかを確認できますか?それが動作しない場合は、(あなたのテンプレートのような)いくつかのコードを投稿してください。

+0

私はあなたが私に言ったことをしましたが、それでも動作しません。 @Esteban –

+1

また、 'request.Files'を削除し、正しいインスタンスを渡す必要があります。 ' profile_form = EditProfileForm(instance = request.user.profile) ' – Esteban

+0

ありがとうございました。 –