【问题标题】:comment not being submitted by my django form我的 Django 表单没有提交评论
【发布时间】:2021-08-07 17:04:14
【问题描述】:

我希望我的用户能够在transfernews 下添加comments [我正在创建一个与体育相关的网站],我尝试了此代码,但由于某种原因我收到此错误TypeError at /transfernews/ Field 'id' expected a number but got <Transfernews: Transfernews object (3)>.,我可以从管理页面手动添加 cmets,但不能从 comment form。谁能告诉我如何修复我的代码?

我的models.py:

class Transfernews(models.Model):
    player_name = models.CharField(max_length=255)
    player_image = models.CharField(max_length=2083)
    player_description = models.CharField(max_length=3000)
    date_posted = models.DateTimeField(default=timezone.now)

class Comment(models.Model):
    user = models.ForeignKey(to=User, on_delete=models.CASCADE)
    transfernews = models.ForeignKey(Transfernews, related_name="comments", on_delete=models.CASCADE)
    body = models.TextField()
    date_added = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return '%s - %s' % (self.transfernews.player_name, self.user.username)

我的forms.py:

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

我的意见.py:

def transfer_targets(request):
    transfernews = Transfernews.objects.all()
    news = request.POST.get("transfer_id", None)
    form = CommentForm(request.POST or None)
    if form.is_valid():
        new_comment = form.save(commit=False)
        new_comment.user = User.objects.get(id=request.user.id)
        new_comment.transfernews_id = Transfernews.objects.get(id=news)
        new_comment.save()
        return redirect(request.path_info)
    return render(request, 'transfernews.html', {'transfernews': transfernews, 'form': form})


我的html文件:

{% for transfer in transfernews %}



    <h2>Comments...</h2>

    {% if not transfer.comments.all %}
    No comments Yet...
    {% else %}
    {% for comment in transfer.comments.all %}
    <strong>
        {{ comment.user.username }} - {{ comment.date_added }}
    </strong>
    <br/>
    {{ comment.body }}
    <br/><br/>

    {% endfor %}
    {% endif %}
    <hr>
    <div>Comment and let us know your thoughts</div>
    <form method="POST">
        {% csrf_token %}
        <input type="hidden" value="{{ transfer.id}}">
        <div class="bg-alert p-2">
            <div class="d-flex flex-row align-items-start">

            </div>
            <div class="mt-2 text-right">
                {{ form|crispy }}
                <br>
                <button class="btn btn-primary btn-sm shadow-none" type="submit">Post comment</button>

                <button class="btn btn-outline-primary btn-sm ml-1 shadow-none" type="button">Cancel</button>
            </div>
        </div>
    </form>

{% endfor %}

【问题讨论】:

  • transfernewsTransfernews 实例而不是单个实例的QuerySet(集合)。当您写new_comment.transfernews_id = transfernews.id 时,您可能会遇到错误...

标签: django django-forms


【解决方案1】:

你必须为你的隐藏输入添加一个名称属性,然后只有隐藏的输入数据将被包含在表单数据中。

<input type="hidden" name="transfer_id" value="{{ transfer.id}}">

并在您的 transfer_targets 视图中进行这些更改

def transfer_targets(request): transfernews = Transfernews.objects.all() transfernews = request.POST.get("transfer_id", None) form = CommentForm(request.POST or None) if form.is_valid(): new_comment = form.save(commit=False) new_comment.user = User.objects.get(id=request.user.id) new_comment.transfernews_id = transfernews.id new_comment.transfernews_id = Transfernews.objects.get(id=transfernews) new_comment.save() return redirect(request.path_info) return render(request, 'transfernews.html', {'transfernews': transfernews, 'form': form})

【讨论】:

  • 上面写着"Comment.user" must be a "User" instance
  • 你能分享你的用户模型吗?
  • 我导入了from django.contrib.auth.models import User
  • 现在是DoesNotExist at /transfernews/ User matching query does not exist.
  • @Abrar 您的用户登录了吗?在您尝试之前,请确保您的用户已登录。还要在视图上添加login_required 装饰器,以确保只有登录的用户才能访问该页面。
【解决方案2】:

尝试使用new_comment.transfernews = transfernews 而不是new_comment.transfernews_id = transfernews.id

还将redirect(request.path_info) 更改为redirect(reverse('&lt;app_name&gt;:&lt;url_namespace&gt;'))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多