ユーザーがさまざまな「タイプ」の投稿を作成できるようにする、かなり基本的なモデルがあります。現在、ベース ' Post
' タイプから継承するテキスト タイプと写真タイプがあります。
私は現在、2 つの QuerySet をプルTextPosts
して連鎖させていますが、これは悪い考えのようです。PhotoPosts
両方のタイプの投稿を一度に単純に照会する方法はありますか? 私がそれ自体で使用.filter()
していない理由Post
は、私が (おそらく)それからTextPost
orPhotoPost
オブジェクトを取得する方法を持っていないからです (または私は?)
PS: Post を単独で使用しない場合は、BasePost または Post と呼ぶ方が理にかなっていますか?
class Post(AutoDateTimeModel):
POST_TYPES = (
# Linkable Social Networks
('TEXT', 'Text'),
('PHOTO', 'Photo'),
('LINK', 'Link'),
)
post_type = models.ForeignKey(ContentType)
user = models.ForeignKey(User, blank=True, null=True)
interests = models.ManyToManyField(Interest, related_name='interests')
class Meta:
app_label = 'posts'
ordering = ('-created_at',)
def save(self, *args, **kwargs):
if not self.pk:
self.post_type = ContentType.objects.get_for_model(type(self))
# import pdb; pdb.set_trace()
super(Post, self).save(*args, **kwargs)
class TextPost(Post):
""" Text post model """
body = models.TextField()
class Meta:
app_label = 'posts'
class PhotoPost(Post):
""" Photo post model. This can contain multiple photos. """
description = models.TextField()
class Meta:
app_label = 'posts'
class Photo(models.Model):
""" Individual image model, used in photo posts. """
caption = models.TextField()
# source_url = models.URLField(blank=True, null=True)
image = ImageField(upload_to=upload_to)
post = models.ForeignKey(PhotoPost, blank=True, null=True, related_name='photos')
user = models.ForeignKey(User, blank=True, null=True, related_name='photos')
class Meta:
app_label = 'posts'
def __unicode__(self):
return 'Photo Object by: ' + str(self.user.get_full_name())