外部脚本无法识别模型字段

时间:2015-10-29 20:05:24

标签: python django

我正在尝试编写一个我打算以预定方式使用的脚本。 该脚本不是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))

2 个答案:

答案 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