需要使用浏览器检查功能来检查浏览器的可变值,并在按钮中的url中输入随机ID,所以我并不是真正的django和东西。我对将要更新或删除的数据进行验证例如,由tenantid检查,我将对单条记录进行新闻更新,并且机制将检查记录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:
答案 0 :(得分:4)
您只对单个值感兴趣,而不对值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
,这很奇怪。在没有{{1}的情况下进行引用} s通常不是一个好主意:例如,ForeignKey
可能不是 指的是真正的租户。此外,默认情况下,Django不会在tenantid
列中添加索引,从而使搜索具有给定tenantid
的客户的计算量更大。
答案 1 :(得分:3)
如果要查找具有特定tenant_id的记录,则可以尝试类似的操作
my_tenant_id = request.user.tenantid
Customer.objects.filter(tenantid=my_tenant_id)
或威廉·范·昂塞姆(Willem Van Onsem)对单笔记录的建议
答案 2 :(得分:2)
Customer.objects.values_list('tenantid', flat=True).filter(id=pk)
将返回列表,而不是单个值。
看起来您两次获得相同的Customer
对象
您可以删除valueOwnerTenantid = Customer.objects.values_list('tenantid', flat=True).filter(id=pk)
行,而仅使用customer.tennantid
来获得tennantid
if customer.tennantid == request.user.tenantid:
...