需要使用浏览器检查来检查浏览器的可变值,并在按钮中的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
的客户的计算量更大。