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

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

または

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

于 2012-07-27T12:08:48.930 に答える
0

Blog.objects.all()で変更Blog.objects.filter(entry__published=True)

それでうまくいくはずです!

于 2012-08-01T04:52:00.127 に答える
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(ブログ__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 に答える