0

这是我的模型:

class Blog(models.Model):
    name = models.CharField(max_length=100)
    tagline = models.TextField()

    def __unicode__(self):
        return self.name

class Entry(models.Model):
    blog = models.ForeignKey(Blog)
    headline = models.CharField(max_length=255)
    body_text = models.TextField()
    published = models.BooleanField()

    def __unicode__(self):
        return self.headline

有一个外部函数,我无权访问它基本上执行以下操作:

def printBlogs(blogs):
    for blog in blogs:
        print blog.name
        for entry in blog.entry_set.all():
            print " *",entry.headline,":", entry.published

以下代码

from weblogs.models import Blog, Entry
r = Blog.objects.all()
printBlogs(r)

生产

 Blog1
  * Article 1 : True
  * Article 2 : True
  * Article 3 : False
 Blog2
  * Article 1 : True
  * Article 2 : False
  * Article 3 : False

获得以下结果的正确代码是什么(请记住,我无权访问 printBlogs)

 Blog1
  * Article 1 : True
  * Article 2 : True
 Blog2
  * Article 1 : True
4

4 回答 4

1

最简单有效的方法是先过滤:

blog.entry_set.filter(published=True)

或者,您可以简单地使用 if 语句:

if entry.published:
    print entry
于 2012-07-27T14:37:27.533 回答
0

改变Blog.objects.all()_Blog.objects.filter(entry__published=True)

这应该够了吧!

于 2012-08-01T04:52:00.127 回答
0

aobjs = [b.a for b in B.objects.exclude(state='Z')]

或者

aobj.b_set.exclude(state='Z')

于 2012-07-27T12:08:48.930 回答
0
for o in queryset:
    if not results.has_key(o.name):
       results[o.name] = list()
    if not (...check if Z):
       results[o.name].append(o)

for a in results:
    print a
    for b in results[a]:
        print b.state

假设您有模型:

class Blog(models.Model):
    name = models.CharField(max_length=100)
    tagline = models.TextField()

    def __unicode__(self):
        return self.name

class Author(models.Model):
    name = models.CharField(max_length=50)
    email = models.EmailField()

    def __unicode__(self):
        return self.name

class Entry(models.Model):
    blog = models.ForeignKey(Blog)
    headline = models.CharField(max_length=255)
    body_text = models.TextField()
    pub_date = models.DateTimeField()
    mod_date = models.DateTimeField()
    authors = models.ManyToManyField(Author)
    n_comments = models.IntegerField()
    n_pingbacks = models.IntegerField()
    rating = models.IntegerField()

    def __unicode__(self):
        return self.headline

并且您想排除所有名称为“test”的博客

您将运行代码:

Entry.objects.exclude( blog __name='test')

它会写查询:

SELECT ... FROM `entry` INNER JOIN `blog` ON (`entry`.`blog_id` = `blog`.`id`) WHERE NOT (`blog`.`name` = test )
于 2012-07-27T11:30:01.640 回答