Python Django查询结果与if语句的比较
需要使用browser inspect检查浏览器可更改的值,并在按钮中的url中输入随机id,因此我对django和其他东西不太在行。我对将要更新或删除的数据进行验证,可由tenantid检查,例如,我将在一行记录上按update,然后机械师将进行检查如果记录tenantid是否等于我的租户id。 问题是我无法将查询结果与int值进行比较 如果有更好的办法,我很高兴听到,谢谢你,祝你过得愉快Python Django查询结果与if语句的比较,python,django,if-statement,web,view,Python,Django,If Statement,Web,View,需要使用browser inspect检查浏览器可更改的值,并在按钮中的url中输入随机id,因此我对django和其他东西不太在行。我对将要更新或删除的数据进行验证,可由tenantid检查,例如,我将在一行记录上按update,然后机械师将进行检查如果记录tenantid是否等于我的租户id。 问题是我无法将查询结果与int值进行比较 如果有更好的办法,我很高兴听到,谢谢你,祝你过得愉快 @login_required() def customer_update(request, pk):
@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()
。但事实上,您甚至可以完全忽略它,因为您已经在客户
中检索了租户
因此,您的观点应该如下所示:
@login_required()
def customer_update(request, pk):
customer = get_object_or_404(Customer, pk=pk)
if customer.tenantid == request.user.tenantid:
# ...
@login\u required()
def客户_更新(请求,主键):
客户=获取对象或404(客户,主键=主键)
如果customer.tenantid==request.user.tenantid:
#…
也就是说,在模型中存储
id
,而不是ForeignKey
到某些租户
模型等,这是相当奇怪的。在没有ForeignKey
s的情况下进行引用通常不是一个好主意:例如,tenatid
s可能不涉及真正的租户。此外,默认情况下,Django不会向tenantid
列添加索引,这使得使用给定tenantid
搜索客户的计算成本更高。您只对单个值感兴趣,而不是对值的QuerySet
感兴趣,因此应该使用.get(…)
而不是.filter()
这里。但事实上,您甚至可以完全忽略它,因为您已经在客户
中检索了租户
因此,您的观点应该如下所示:
@login_required()
def customer_update(request, pk):
customer = get_object_or_404(Customer, pk=pk)
if customer.tenantid == request.user.tenantid:
# ...
@login\u required()
def客户_更新(请求,主键):
客户=获取对象或404(客户,主键=主键)
如果customer.tenantid==request.user.tenantid:
#…
也就是说,在模型中存储
id
,而不是ForeignKey
到某些租户
模型等,这是相当奇怪的。在没有ForeignKey
s的情况下进行引用通常不是一个好主意:例如,tenatid
s可能不涉及真正的租户。此外,默认情况下,Django不会向tenantid
列添加索引,这使得使用给定tenantid
搜索客户的计算成本更高。customer.objects.values\u list('tenantid',flat=True)。filter(id=pk)
将返回列表而不是单个值。
看起来您两次获得相同的Customer
对象
您可以删除valueOwnerTenantid=Customer.objects.values\u列表('tenantid',flat=True)。筛选(id=pk)
行,只需使用Customer.tennanti
获取tennanti
if customer.tennantid == request.user.tenantid:
...
Customer.objects.values\u list('tenantid',flat=True).filter(id=pk)
将返回一个列表而不是单个值。
看起来您两次获得相同的Customer
对象
您可以删除valueOwnerTenantid=Customer.objects.values\u列表('tenantid',flat=True)。筛选(id=pk)
行,只需使用Customer.tennanti
获取tennanti
if customer.tennantid == request.user.tenantid:
...
如果要查找具有特定租户id的记录,可以尝试类似的方法
my_tenant_id = request.user.tenantid
Customer.objects.filter(tenantid=my_tenant_id)
或者Willem Van Onsem建议的单张唱片如果您要查找具有特定租户id的唱片,可以尝试类似的方法
my_tenant_id = request.user.tenantid
Customer.objects.filter(tenantid=my_tenant_id)
或者Willem Van Onsem建议的单记录使用
.get(id=pk)
而不是.filter(id=pk)
。您将获取相同的客户
两次。为什么不直接检查一下customer.tenantid==request.user.tenantid
?使用.get(id=pk)
而不是.filter(id=pk)
。您将两次获取相同的客户。你为什么不检查一下customer.tenantid==request.user.tenantid
?我的头刚刚吹对了我的客户模型有tenantid,但我仍然需要通过查询来获得它:(,它正在工作。谢谢你的建议。@BCA:好吧,你得到的查询与你已经得到的查询相同。因此,我们没有像原始代码片段中那样在这里执行第二次查询。我们“背负”在get_object_或_404(…)
query。我的头刚刚吹对了,我的客户模型有tenantid,但我仍然需要通过查询来获得它:(,它正在工作。谢谢你的建议。@BCA:好吧,你是通过与你之前的查询相同的查询来获得它的。因此,我们没有像原始代码片段中那样在这里执行第二次查询。我们“背驮”了它在get\u object\u或\u 404(..)
查询中。