2011-12-11 3 views
16

ログインユーザーとDjango ModelFormに問題があります。私は_Animal_という名前のクラスを持っていて、ForeignKeyからUserまでのデータと、年齢、レースなどの動物に関するデータがあります。Django ModelFormでrequest.userを使用しています

ユーザーがDBに動物を追加することができますし、私は、各動物の作者を追跡する必要があるので、私は、ユーザーが、動物のインスタンスを作成するときに記録されからrequest.userを追加する必要があります。

models.py

class Animal(models.Model): 
    name = models.CharField(max_length=300) 
    age = models.PositiveSmallIntegerField() 
    race = models.ForeignKey(Race) 
    ... 
    publisher = models.ForeignKey(User) 
    def __unicode__(self): 
     return self.name 

class AnimalForm(ModelForm): 
    class Meta: 
     model = Animal 

主な目的は、フォームでの出版社のフィールドを非表示にし、保存ボタン押すときログインしているユーザーを提出しています。

initialを使用して、現在のユーザーを表示することができますが、私が望むのはフィールドを表示しないことです。

views.py

@login_required 
def new_animal(request): 
    if request.method == "POST": 
     form = AnimalForm(request.POST) 
     if form.is_valid(): 
      form.save() 
      return redirect('/') 
     else: 
      variables = RequestContext(request, {'form': form}) 
      return render_to_response('web/animal_form.html', variables) 
    else: 
     form = AnimalForm(initial={'publisher': request.user}) 
    variables = RequestContext(request, {'form': form}) 
    return render_to_response('web/animal_form.html', variables) 
+0

ですか? – shailenTJ

答えて

31

あなたは、ビューでそれを設定し、フォームから除外する必要があります。

class AnimalForm(ModelForm): 
    class Meta: 
     model = Animal 
     exclude = ('publisher',) 

...とビューで:

form = AnimalForm(request.POST) 
    if form.is_valid(): 
     animal = form.save(commit=False) 
     animal.publisher = request.user 
     animal.save() 

(最初else句ことにも注意してください - ラインはすぐにリダイレクトを次のように - 不要であるあなたがそれを残した場合、実行は落ちます。同一のビューの最後の2行、に至るまで)少し短い

+0

ダニエルありがとうございました。最後の2行は途中でインデントされるべきです。 – amb

8

別の方法():。
あなたにもフィールドを除外する必要があります。

0その後、ビューの
class AnimalForm(ModelForm): 
    class Meta: 
     model = Animal 
     exclude = ('publisher',) 

: `django.contrib.auth.models`の` User`インスタンスが

animal = Animal(publisher=request.user) 
form = AnimalForm(request.POST, instance=animal) 
if form.is_valid(): 
    animal.save() 
関連する問題