我正在尝试编写一个我打算以预定方式使用的脚本。 该脚本不是django项目的一部分,但与之通信。
脚本喜欢
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "proj.settings")
from django.db.models import Q
from app.models import *
transactions = Transaction.objects.filter(Q(paypal_auth != None)
and Q(paypal_auth.payer_id != None))
现在问题是python控制台的输出:
AttributeError: module 'app.models.paypal_auth' has no attribute 'payer_id'
为什么会发生这种情况?
感谢@daniel,这是我的解决方案:
transactions = Transaction.objects.filter(~Q(paypal_auth__payment_id=None)
& ~Q(paypal_auth__payer_id=None))
答案 0 :(得分:1)
这与外部脚本无关。这不是你在Django中查询的方式;有几件事是错误的,它们在你的主要应用程序中也是错误的。
您需要使用双下划线语法来交叉关系;另外,您不能使用!=
之类的表达式,也不能使用and
。您的查询应该是:
transactions = Transaction.objects.filter(
Q(paypal_auth__ne=None) & Q(paypal_auth__payer_id__ne=None))
虽然请注意你的第二个条件意味着第一个,所以你可以这样做:
transactions = Transaction.objects.filterpaypal_auth__payer_id__ne=None)
答案 1 :(得分:0)
您导入了paypal_auth
模块,但该类为PayPalAuth
,可能位于paypal_auth
模块中。
尝试paypal_auth.PayPalAuth.payer_id
(或参考特定实例的payer_id
)