python - 我无法使用自定义模型管理器访问模型的属性
问题描述
我正在为客户模型编写自定义模型管理器,这是我的模型
class CustomerMenager(models.Manager):
def getCutomerCountry(self):
return self.filter(country__exact='India')
class Customer(models.Model):
firstName = models.CharField(max_length=40)
lastName = models.CharField(max_length=40)
city = models.CharField(max_length=40)
country = models.CharField(max_length=40)
phone = models.CharField(max_length=20)
mymanager = CustomerMenager()
def __str__(self):
return self.firstName
我的看法是
def customerView(request):
custmr = CustomerForm()
if request.method == 'POST':
custmr = CustomerForm(request.POST)
if custmr.is_valid():
custmr.save()
c = Customer.mymanager.getCutomerCountry()
print(c)
return render(request,'customer.html',{'customer':custmr,'cust':c})
当上面的代码执行时,我得到以下对象
Django version 3.1.2, using settings 'DjangoTuts.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
<QuerySet [<Customer: amit>]>
但是当我在像这样的 cust.firstName 模板中访问这个对象时,它给了我错误
'QuerySet' object has no attribute 'firstName'
我不明白为什么会这样。请帮助提前谢谢
解决方案
这是因为getCutomerCountry
返回的是一个QuerySet
对象,而不是一个Customer
对象。
要解决此问题,您可以getCutomerCountry
返回第一个对象,如下所示:
...
def getCutomerCountry(self):
return self.filter(country__exact='India').first()
Customer
或在您的视图代码中,从获取第一个QuerySet
,如下所示:
def customerView(request):
...
c = Customer.mymanager.getCutomerCountry().first()
...
这将解决您看到的错误。
推荐阅读
- c++ - 用输入调用变量,这在 C++ 中有效吗?
- bash - 在bash中,如何捕捉程序自行退出的“事件”?
- multithreading - 将闭包(返回具有特征的结构)发送到线程会导致大小错误
- odbc - 通过 Windows ODBC PostgreSQL 驱动程序连接到 HSQLDB 2.5
- docker - docker 在 docker ps -a 中未运行
- python - 为什么 Kivy 应用在使用 paramiko 模块时会崩溃?
- c# - 无法访问临时表 .NET Core
- ios - 使用 Instagram Basic Display API 获取用户的元数据
- assembly - 为什么 XORing %eax 不会导致段错误?
- python - 在托盘中显示和隐藏我的 PyQt 应用程序不正常