2016-05-03 11 views
1

django形式のモデルのForeignKeyフィールドを更新しようとしています。私は彼が書いた記事の著者として彼の名前を入力フィールドに書き込まないようにしたいが、彼のidArticleのフィールドに保存しなければならない。私のhtml形式では、隠された入力を持つボタンだけを表示します。しかし、私のviews.pyでは、フォームにはuser.idがあり、'article_author'フィールドに入力する必要があります。Django形式のForeignKeyフィールドのみを更新します。

残念ながら、私はテーブルを更新していません。私は間違って何をしていますか?

私のモデル:

class Article(models.Model): 
    article_pub_date = models.DateField(default=None,null=True,verbose_name="Дата публикации") 
    article_title = models.CharField(max_length=70, verbose_name="Заголовок", null=True) 
    article_text = models.TextField(verbose_name="Текст", null=True) 
    article_author = models.ForeignKey(User, verbose_name='Автор', blank=True, null=True) 

私のviews.py

def article_detail(request, article_id): 
    user = request.user 
    article = get_object_or_404(Article, pk=article_id) 
    author_form = ArticleForm(request.POST or None, instance=article, initial={'article_author': user.id}) 
    if author_form.is_valid(): 
     author_form.save() 
    else: 
     return redirect('/') 

私forms.py

class ArticleForm(forms.ModelForm): 
    class Meta: 
     model = Article 
     fields = ('article_author',) 
     widgets = {'article_author': forms.HiddenInput()} 

と私のテンプレート:

<form method="POST" action=""> 
{% csrf_token %} 
{{ author_form.as_p }} 
<input type="submit" value="BIND" class="btn"> 
</form> 

答えて

1

は、次のいずれかを試してみてください。

if author_form.is_valid(): 
    article = author_form.save(commit=False) 
    article.article_author = user 
    # article.article_author_id = user.id #w ill work as well 
    article.save() 
else: 
    return redirect('/') 

またはフォームのインスタンスで:

initial={'article_author_id': user.id} 
関連する問題