首页 > 解决方案 > 如何添加我可以在 Django 中添加带有查询集的评论表单吗?

问题描述

信息:我有 sales_item QuerySet 在视图中。我想批准、拒绝和添加对特定 sales_items 的一些评论。我还包括 html 代码,添加销售列表,表单位于下拉菜单中。菜单弹出的地方,我们填写表格。

问题:视图文件下面的代码出现错误Sale matching query does not exist.

模型.py

class Authorize(models.Model):
    APPROVED = 'AP'
    DECLINED = 'DL'
    STATUS_CHOICES = [
        (APPROVED, 'Approved'),
        (DECLINED, 'Declined'),
    ]
    user = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
    sales_item = models.ForeignKey(Sale, on_delete=models.CASCADE, null=True, blank=True)
    comments = models.TextField(max_length=1000, blank=True)
    created_at = models.DateTimeField(auto_now_add=True)
    status = models.CharField(choices=STATUS_CHOICES, default=APPROVED, max_length=2)

表格.py

class AuthorizeForm(forms.ModelForm):

    class Meta:
        model = Authorize
        fields = [
            'comments',
            'status'
        ]

视图.py

def SalesListView(request):
    queryset = Sale.objects.all()
    auth_form = AuthorizeForm(data=request.POST)
    if request.method == 'POST':
        pk = request.POST.get('pk')
        sales = Sale.objects.get(id=pk)

        if auth_form.is_valid():
            approved = auth_form.save(commit=False)
            approved.sales_item = sales
            approved.save()

    context = {
        'sales': queryset,
        'form': auth_form
    }
    return render(request, 'pending_sale.html', context)

索引.html

{% for object in sales %}
<div class="col-lg-6">
    <div class="hpanel hblue">
        <div class="panel-body">
            <div class="row">
                <div class="col-sm-8">
                    <h4><a href="#"> {{ object.customers }}</a></h4>
                    <p>
                        {{ object.content }}
                    </p>
                    <div class="row">
                        <div class="col-sm-3">
                            <div class="project-label">Saler</div>
                            <small>{{ object.saler }}</small>
                        </div>
                        <div class="col-sm-4">
                            <div class="project-label">Timestamp</div>
                            <small>{{ object.created_on|naturalday }}</small>
                        </div>
                        <div class="col-sm-4">
                            <div class="project-label">Product</div>
                            <small>{{ object.created_on|naturalday }}</small>
                        </div>
                    </div>
                </div>
                <div class="col-sm-4 project-info">
                    <div class="project-action">
                        <div class="dropdown">

                            <div class="btn-group">
                                <button class="btn btn-xs btn-default"> View</button>
                                <button class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown">
                                    Edit
                                </button>
                                <div class="dropdown-menu auth-form-dropdown dropdown-menu-sw " style="width:352px;">
                                    <a class="Link">
                                        <i class="pe-7s-help1" style="font-style: 150px;"></i>
                                    </a>

                                    <div style="font-weight: bold;">
                                        Approvels
                                    </div>
                                    <div style="margin-top: 10px;">
                                        <form action="." method="POST"> {% csrf_token %}

                                            <div class="form-group">
                                                <textarea name="comments" id="id_comments" cols="30" rows="2" required
                                                    class="form-control" placeholder="comments..."></textarea>
                                            </div>
                                            <div class=" float-right">
                                                <div id="id_status">
                                                    <input type="radio" name="status" value="AP" required
                                                        id="id_status_0">
                                                    <label for="id_status_0" class="waves-effect waves-themed"
                                                        required>Approved</label>

                                                    <input type="radio" name="status" value="DL" required
                                                        id="id_status_1">
                                                    <label for="id_status_1" class="waves-effect waves-themed"
                                                        required>Declined</label>
                                                </div>
                                            </div>

                                            <button type="submit" class="btn btn-sm btn-default"
                                                style="font-size: 13px; padding: 3px; font-weight: 400;">submit</button>
                                        </form>

                                    </div>

                                </div>
                            </div>
                        </div>
                    </div>

                    <div class="project-value">
                        <h2 class="text-info">
                            ${{ object.products.price }}
                        </h2>
                        <p id="stores"></p>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
{% endfor %}

标签: pythondjangodjango-modelsdjango-views

解决方案


您传递的主键('pk')无效。尝试使用简单的打印语句获取一些 id 即主键

q=Sale.objects.all().values('id')
print(q)

尝试这两个命令以了解您有哪些可用的 id 选项,然后尝试处理查询集。

无论如何,还有另一种方法可以完成此任务,而不是使用表单,您可以将 id 直接传递到 url 部分。是一个很好的教程,解释了如何通过 url 传递 id。


推荐阅读