簡體   English   中英

Django 意見表

[英]Django comment form

我正在按照 Django 中央、https://djangocentral.com/creating-comments-system-with-django/給出的評論指南創建評論,它正在工作。 但是,我使用的是{{ form.as_p }} ,它會給出 3 個字段,如表單所示,名稱為 email 和正文。 但我想有預定義的名稱,這將是您登錄時使用的用戶名和附加到該帳戶的 email。 我將如何 go 提前創建它?

forms.py

class CommentForm(forms.ModelForm):
    class Meta:
        model = Comment
        fields = ['name', 'email', 'body']

模型.py

class Comment(models.Model):
    post = models.ForeignKey(Post, related_name='comments', on_delete=models.CASCADE)
    name = models.CharField(max_length=255)
    email = models.EmailField()
    body = models.TextField()

    date_added = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering = ['-date_added']

    def __str__(self):
        return self.name
    

視圖.py

def post_detail(request, category_slug, slug, status=Post.ACTIVE):
    post = get_object_or_404(Post, slug=slug)

    if request.method == 'POST':
        form = CommentForm(request.POST)
        if form.is_valid():
           comment = form.save(commit=False)
           comment.post = post
           comment.save()

           return redirect('post_detail',  category_slug=category_slug, slug=slug)
    else:
        form = CommentForm()

    return render(request, 'blog/post_detail.html', {'post': post, 'form': form})

在 html 模板中

{% if user.is_authenticated %}
    <h2 class="subtitle is-4">Comments</h2>
<form method="post" class="mb-6">
    {% csrf_token %}
    {{ form.as_p }}
    <div class="field">
        <div class="control">
            <button class="button is-success">Submit comment</button>
         </div>
    </div>
</form>
{% endif %}

如果要預先設置用戶名和 email 字段,可以使用如下initial表單參數:

視圖.py

def post_detail(request, category_slug, slug, status=Post.ACTIVE):
    post = get_object_or_404(Post, slug=slug)

    if request.method == 'POST':
        form = CommentForm(request.POST)
        if form.is_valid():
           comment = form.save(commit=False)
           comment.post = post
           comment.save()

           return redirect('post_detail',  category_slug=category_slug, slug=slug)
    else:
        user = request.user
        form = CommentForm(initial={"name": user.username, "email": user.email})

        return render(request, 'blog/post_detail.html', {'post': post, 'form': form})

forms.py

class CommentForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['name'].disabled = True
        self.fields['email'].disabled = True 
        
       # OR set readonly widget attribute.
       # self.fields['name'].widget.attrs['readonly'] = True
       # self.fields['email'].widget.attrs['readonly'] = True

    class Meta:
        model = Comment
        fields = ['name', 'email', 'body']

暫無
暫無

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

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