contentTypeの問題 - 人間はばかです - 元のモデルをcontentType抽象化された「お気に入り」モデルに結び付ける方法がわかりません

StackOverflow https://stackoverflow.com/questions/2656637

  •  27-09-2019
  •  | 
  •  

質問

元々ここから始めました: 文字列の結果としてクエリのdjango-ベース10のint()の無効なリテラル

私は自分のサイト内に多くのアプリを持っています。現在、単純な「ブログ」アプリを使用しています。 DjangoのContentType Frameworkを活用して、あらゆるタイプの「お気に入り」を持つことができる「お気に入りの」アプリを簡単に開発しました...しかし、他の方法で行こうとしていますが、私は何がわかりません。 'mをしていて、例が見つかりません。

お気に入りのモデルから始めます:

お気に入り/models.py

from django.db import models
from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes import generic
from django.contrib.auth.models import User

class Favorite(models.Model):
        content_type    = models.ForeignKey(ContentType)
        object_id       = models.PositiveIntegerField()
        user            = models.ForeignKey(User)
        content_object  = generic.GenericForeignKey()

        class Admin:
                list_display = ('key', 'id', 'user')

        class Meta:
                unique_together = ("content_type", "object_id", "user")

これにより、お気に入り(ユーザーの「お気に入り」ページなど)をループし、{{favory.content_object.title}}を介して関連するブログオブジェクトを取得できます。

私が今望んでいるのは、私がブログモデルにする必要があることは、お気に入りにテザーを持つことができるようにするために必要なことです(したがって、リストに表示されると、たとえば強調表示できます)。

これがブログモデルです:

ブログ/models.py

from django.db import models
from django.db.models import permalink
from django.template.defaultfilters import slugify
from category.models import Category
from section.models import Section
from favorite.models import Favorite
from django.contrib.auth.models import User
from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes import generic

class Blog(models.Model):
        title           = models.CharField(max_length=200, unique=True)
        slug            = models.SlugField(max_length=140, editable=False)
        author          = models.ForeignKey(User)
        homepage        = models.URLField()
        feed            = models.URLField()
        description     = models.TextField()
        page_views      = models.IntegerField(null=True, blank=True, default=0 )
        created_on      = models.DateTimeField(auto_now_add = True)
        updated_on      = models.DateTimeField(auto_now = True)

        def __unicode__(self):
                return self.title

        @models.permalink
        def get_absolute_url(self):
                return ('blog.views.show', [str(self.slug)])

        def save(self, *args, **kwargs):
                if not self.slug:
                        slug = slugify(self.title)
                        duplicate_count = Blog.objects.filter(slug__startswith = slug).count()
                        if duplicate_count:
                                slug = slug + str(duplicate_count)
                        self.slug = slug
                super(Blog, self).save(*args, **kwargs)

class Entry(models.Model):
        blog            = models.ForeignKey('Blog')
        title           = models.CharField(max_length=200)
        slug            = models.SlugField(max_length=140, editable=False)
        description     = models.TextField()
        url             = models.URLField(unique=True)
        image           = models.URLField(blank=True, null=True)
        created_on      = models.DateTimeField(auto_now_add = True)

        def __unicode__(self):
                return self.title

        def save(self, *args, **kwargs):
                if not self.slug:
                        slug = slugify(self.title)
                        duplicate_count = Entry.objects.filter(slug__startswith = slug).count()
                        if duplicate_count:
                                slug = slug + str(duplicate_count)
                        self.slug = slug
                super(Entry, self).save(*args, **kwargs)

        class Meta:
                verbose_name = "Entry"
                verbose_name_plural = "Entries"

ガイダンスはありますか?

役に立ちましたか?

解決

Django Docはここにあります: 逆のジェネリック関係. 。基本的にブログモデル自体では、 GenericRelation...

class Blog(models.Model):
    favorites = generic.GenericRelation(Favorite)

特定のブログについては、すべてを見つけることができます Favorite それに関連付けられているモデル...

b = Blog.objects.get(slug='hello-world-blog-slug')
all_blog_favorites = b.favorites.objects.all()

または、現在のユーザーがブログを好むかどうかを確認してください...

user_has_blog_favorited = b.favorites.objects.filter(user=request.user).exists()
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top