2016-09-01 12 views
0

各ユーザは、このように、複数の敵を持つことができます。保存する前にDjangoフォームを変更するには?私のプロジェクトで

モデル

class EnemyModel(models.Model): 
    name = models.CharField(max_length=128) 
    weapon = models.CharField(max_length=128) 
    related_user = models.ForeignKey(UserProfile) 

class UserProfile(models.Model): 
    user = models.OneToOneField(User, on_delete=models.CASCADE) 

のみユーザーは自分のプロフィールに敵を追加することができますので、私はこのような形をした:

フォーム

class AddEnemyForm(forms.ModelForm): 
    class Meta: 
     model = EnemyModel 
     exclude = ['related_user'] # only current user 

私の考えましたビューで除外フィールドを変更するには、それが動作しません:

ビューの前にフォームを変更保存方法

def add_enemy(request): 
    args={} 
    if request.method == "POST": 
     form = AddEnemyForm(request.POST) 
     form.related_user = request.user # error 
     # form.related_user_id = request.user.id # also error 
     if form.is_valid(): 
      form.save() 
      return HttpResponse("<h1>Done!</h1>") 
     else: 
      args.update(csrf(request)) 
      args["form"]=form 
      return render_to_response("add_enemy.html",args) 
    args.update(csrf(request)) 
    args["form"]=AddEnemyForm() 
    return render_to_response("add_enemy.html",args) 

を?

答えて

1

使用form.instance

def add_enemy(request): 
    args={} 
    if request.method == "POST": 
     form = AddEnemyForm(request.POST) 
     # form.instance is the instance to be saved 
     form.instance.related_user = request.user.userprofile 
     if form.is_valid(): 
      form.save() 
      return HttpResponse("<h1>Done!</h1>") 
     else: 
      args.update(csrf(request)) 
      args["form"]=form 
      return render_to_response("add_enemy.html",args) 
    args.update(csrf(request)) 
    args["form"]=AddEnemyForm() 
    return render_to_response("add_enemy.html",args) 

enemymodel.related_userUserProfileであるべきであり、request.userUserであること。 request.user.userprofileを使用する必要があります。

+0

ありがとうございます! – user2449761

関連する問題