簡體   English   中英

如何添加我可以在 Django 中添加帶有查詢集的評論表單嗎?

[英]How to add can i add comment form with queryset in 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)

forms.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 %}

您傳遞的主鍵('pk')無效。嘗試使用簡單的打印語句獲取一些 id 即主鍵

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

嘗試這兩個命令以了解您有哪些可用的 id 選項,然后嘗試處理查詢集。

無論如何,還有另一種方法可以完成此任務,而不是使用表單,您可以將 id 直接傳遞到 url 部分。 是一個很好的教程,解釋了如何通過 url 傳遞 id。

您在嘗試通過以下方式獲取 object 時遇到了他的異常:

銷售額 = Sale.objects.get(id=pk)

您可以通過此示例捕獲此錯誤

try:
    sales = Sale.objects.get(id=pk)
except Sale.DoesNotExist:
    return ValidationError(f'No sale by id {pk}')

嘗試檢查您傳遞給查詢的主鍵是什么,它是否存在於數據庫中,如果不存在則返回錯誤。 如果 Sale 不存在,您可能需要創建它

暫無
暫無

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

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