Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django查询结果与if语句的比较_Python_Django_If Statement_Web_View - Fatal编程技术网

Python Django查询结果与if语句的比较

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):

需要使用browser inspect检查浏览器可更改的值,并在按钮中的url中输入随机id,因此我对django和其他东西不太在行。我对将要更新或删除的数据进行验证,可由tenantid检查,例如,我将在一行记录上按update,然后机械师将进行检查如果记录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()
。但事实上,您甚至可以完全忽略它,因为您已经在
客户
中检索了
租户

因此,您的观点应该如下所示:

@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(..)
查询中。