1

私はDjangoに次のモデルを持っています:

from django.db import models

class User(models.Model):
    pen_name = models.CharField(max_length=30)
    email = models.EmailField()
    activated = models.BooleanField()
    def __unicode__(self):
        return self.email + '-' + self.pen_name

class Original_Work(models.Model):
    title = models.CharField(max_length=25)
    summery = models.TextField()
    user = models.ForeignKey(User)
    date_published = models.DateField()
    one_shot = models.BooleanField()
    def __unicode__(self):
        return self.title + '-' + self.user.email

class Chapter(models.Model):
    work = models.ForeignKey(Work)
    title = models.CharField(max_length=25)
    order_number = models.IntegerField()

class Review(models.Model):
    chapter = models.ForeignKey(Chapter)
    work = models.ForeignKey(Work)
    date_published = models.DateField()

class Work_Subscription(models.Model):
    user = models.ForeignKey(User)
    to_work = models.ForeignKey(Work)

class User_Subscription(models.Model):
    user = models.ForeignKey(User, related_name='user_owner')
    to_user = models.ForeignKey(User, related_name='user_to')

class Alert(models.Model):
    title = models.CharField(max_length=60)
    # add type
    link = models.CharField()


class Book(models.Model):
    title = models.CharField(max_length=50)
    author = models.CharField(max_length=50)
    def __unicode__(self):
        return self.title

夏の/説明では、各ユーザーは「持っている」作品を持っています。各作品には章があります。各章には、レビューと各レビューが「あります」。他にもありますが、私の質問ではそれらは重要ではありません。現在、「所有」されているものにはそれぞれ、「所有者」への外部キーがあります。したがって、レビューには章への外部キーがあり、章には作品への外部キーがあります。私の質問は、これを行うためのより良い方法は何ですか?現在、サーバーはすべてのレビューを調べて、どのレビューが作品に属しているかを見つける必要があります。ルックアッププロセスをスピードアップ/改善する方法はありますか?

編集:私は通常、次の方向でデータにアクセスする必要があります。ユーザー->作業->章->レビュー。サーバーがどのユーザーを知っているかを意味し、ユーザーが行ったすべての作業を見つけるように求められます。これは、仕事を知り、ユーザーを見つけることとは対照的です。

4

1 に答える 1

0

ここでは、OriginalWorkクラスを単に「Work」と呼ぶつもりだったと思います。また、サイトの現在の訪問者に対してクエリを実行していることも前提としています。これでうまくいくはずです:

author = request.user
Review.objects.filter(chapter__work__user=author)

また、ChapterのReviewキーとWorkのChapterキーがあるため、Reviewクラスに冗長な作業フィールドは必要ありません。つまり、チャプターを通過することで、レビューから作業に簡単に到達できます。そこに到達するために2つの方法を用意する必要はありません。

詳細については、QuerySetAPIのドキュメントを参照してください。

于 2012-07-25T04:04:45.913 に答える