使用django,如何在模型中创建方法来返回查询数据

Joh*_*hnd 2 django orm

在下面的代码中,我想创建方法show_pro,它将显示专业案例的所有Arguments.

我收到此错误:

>>> Case.objects.all()[0].show_pro()
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/home/john/mysite/../mysite/cases/models.py", line 23, in show_pro
    return self.objects.filter(argument__side__contains='p')
  File "/usr/lib/python2.5/site-packages/django/db/models/manager.py", line 151, in __get__
    raise AttributeError, "Manager isn't accessible via %s instances" % type.__name__
AttributeError: Manager isn't accessible via Case instances
Run Code Online (Sandbox Code Playgroud)

这是代码:

from django.db import models
from django.contrib.auth.models import User
import datetime

SIDE_CHOICES = (
        ('p', 'pro'),
        ('c', 'con'),
        ('u', 'undecided'),
    )



    class Case(models.Model):
        question = models.CharField(max_length=200)
        owner = models.ForeignKey(User)
        pub_date = models.DateTimeField('date published')
        rating = models.IntegerField()
        def __unicode__(self):
            return self.question
        def was_published_today(self):
            return self.put_date.date() == datetime.date.today()
        def show_pro(self):
            return self.objects.filter(argument__side__contains='p')

    class Argument(models.Model):
        case = models.ForeignKey(Case)
        reason = models.CharField(max_length=200)
        rating = models.IntegerField()
        owner = models.ForeignKey(User)
        side = models.CharField(max_length=1, choices=SIDE_CHOICES)
        def __unicode__(self):
            return self.reason
Run Code Online (Sandbox Code Playgroud)

Tys*_*son 8

尝试:

def show_pro(self):
    return self.argument_set.filter(side='p')
Run Code Online (Sandbox Code Playgroud)

基本上,您需要对ForeignKey关系执行反向查找,然后对其进行过滤以获取具有的相关Argument对象side='p'.

show_pro函数中,self不是QuerySet - 它指的是对象本身.