簡體   English   中英

僅更新Django表單中的ForeignKey字段

[英]Update only ForeignKey field in Django form

我嘗試以django形式更新模型的ForeignKey字段。 我希望用戶不要將他的名字寫入輸入字段作為他撰寫的文章的作者,但他的id必須保存在Article模型的字段中。 在我的html格式中,我只顯示一個隱藏輸入的按鈕。 但在我的views.py中,我寫道表單應該使用user.id並將其放在'article_author'字段中。

不幸的是,我沒有更新表。 我究竟做錯了什么?

我的模特:

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>

請嘗試以下方法之一:

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}  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM