需要使用浏览器检查来检查浏览器的可变值,并在按钮中的url中输入随机ID,因此我对Django和其他东西不是很赞成。例如,我要对单条记录进行新闻更新,而技术人员将检查记录tenantid是否等于我的租户ID。
问题是我无法将查询结果与int值进行比较。

如果有更好的方法,我很高兴听到,谢谢您的美好时光。

@login_required()  def customer_update(request, pk):
    customer = get_object_or_404(Customer, pk=pk)
    valueOwnerTenantid = Customer.objects.values_list('tenantid',   flat=True).filter(id=pk)
    print(valueOwnerTenantid)
    print(request.user.tenantid)
    print(valueOwnerTenantid.query)

    if number(valueOwnerTenantid) == number(request.user.tenantid):
        if request.method == 'POST':
            print('Equal and POST')
            form = CustomerForm(request.POST, instance=customer)
        else:
            print('Equal and Get')
            form = CustomerForm(instance=customer)
            return save_customer_form(request, form, 'customer_update_partial.html')
    else:

最佳答案

您只对单个值感兴趣,而不对值的QuerySet感兴趣,因此在此应使用.get(..)而不是.filter()。但是实际上,您甚至可以完全省略它,因为您已经在tenantid中检索了customer

因此,您的视图应如下所示:

@login_required()
def customer_update(request, pk):
    customer = get_object_or_404(Customer, pk=pk)
    if customer.tenantid == request.user.tenantid:
        # ...


话虽这么说,您在模型中存储id而不是对某些ForeignKey模型的Tenant等存储是相当奇怪的。在没有ForeignKey的情况下进行引用通常不是一个好主意:例如,tenantid可能并不指代真正的租户。此外,默认情况下,Django不会将索引添加到tenantid列,从而使搜索具有给定tenantid的客户的计算量更大。

10-07 14:41