2

ユーザーが投稿をお気に入りとして設定できるアプリケーションがあります。モデルは次のように定義されます。

class UserProfile(models.Model):  
    user = models.OneToOneField(User)
    favorites = models.ManyToManyField('Post', through='Favorite', related_name='favorited_by')

class Post(models.Model):
    created_by = models.ForeignKey(UserProfile)
    body = models.TextField()

class Favorite(models.Model):
    created_by = models.ForeignKey(UserProfile)
    post = models.ForeignKey(Post)

現在、投稿を照会すると同時に、投稿が現在のユーザーによってお気に入りにされているかどうかを確認する簡単な方法を探しています。現在、エレガントとはほど遠い次のソリューションを使用しています。

query = """
    SELECT p.id, p.body, p.created_by_id, f.created_by_id AS favorited 
        FROM main_post p LEFT OUTER JOIN main_favorite f
        ON 
            p.id = f.post_id AND     
            f.created_by_id = %s
    """;

posts = Post.objects.raw(query, [request.user.userprofile.id])

これにより、投稿が現在のユーザーによってお気に入りに登録されていない場合は null 値、投稿がお気に入りに登録されている場合は現在のユーザーの ID を持つ「favorited」という名前の列が作成されます。

djangoのORMを使用して、これをよりシンプルかつエレガントに行うことができる方法はありますか?

4

1 に答える 1

0

Djangoは、あなたのケースで役立つかもしれないcontenttypesフレームワークを提供します。また、このために一般的な外部キーを使用して、よりエレガントな方法で同じ作業を行います。

** https://docs.djangoproject.com/en/dev/ref/contrib/contenttypes/で例を確認してください。これらは、達成しようとしているものと非常によく似ています。

于 2013-02-11T20:43:24.930 に答える