Bootcamp: さまざまな種類の飼料で飼育する

作成日 2017年12月06日  ·  9コメント  ·  ソース: vitorfs/bootcamp

私は3種類のフィードを実装しようとしています:

  1. ステータス(メッセージフィード)
  2. ビデオフィード
  3. 画像フィード

フィードクラス、フィードタイプ、および各タイプに特定のクラスを使用していますが、フィードクラスを各タイプクラス(ビデオクラス、画像クラス)に接続する方法がわかりません

なにか提案を?

サポートをありがとう

Support enhancement question

全てのコメント9件

@ sebastian-codeこの機能はわかりましたが、ビュー内の画像フィードまたはビデオフィードから追加のフィールドを取得する方法がわかりません。

これは私のコードです:

<strong i="7">@python_2_unicode_compatible</strong>
class Feed(models.Model):
    #STATUS OF FEEDS
    DRAFT       = 'D'
    PUBLISHED   = 'P'
    INVISIBLE   = 'I'
    VISIBLE     = 'V'

    # #TYPE OF FEEDS
    TYPE_STATUS = 'STATUS'
    # TYPE_IMG = 'IMAGE'
    # TYPE_VOD = 'VIDEO'
    # TYPE_MATCH = 'MATCH'

    STATUS = (
        (DRAFT, 'Draft'),
        (PUBLISHED, 'Published'),
    )


    user            = models.ForeignKey(User)
    date            = models.DateTimeField(auto_now_add=True)
    post            = models.TextField()
    parent          = models.ForeignKey('Feed', null=True, blank=True)
    likes           = models.IntegerField(default=0)
    comments        = models.IntegerField(default=0)
    #post_type   = models.TextField(null=True, blank=True)
    #media_url   = models.TextField(null=True, blank=True)

    media_url       = None
    #Custom fields
    post_type       = models.ForeignKey('FeedType')
    status          = models.CharField(max_length=1, choices=STATUS, default=DRAFT)
    tags            = TaggableManager()
    specific_post   = models.IntegerField(default=0)

    class Meta:
        verbose_name = _('Feed')
        verbose_name_plural = _('Feeds')
        ordering = ('-date',)

#
class FeedType(models.Model):

    feed_type = models.CharField(max_length=255, default=Feed.TYPE_STATUS)

    class Meta:
        verbose_name = _('FeedType')
        verbose_name_plural = _('FeedTypes')
        ordering = ('pk',)

    def __str__(self):
        return self.feed_type

    #method
    <strong i="8">@staticmethod</strong>
    def get_status_type():
        print("get_status_type();")
        feed_type = FeedType.objects.get(pk=1)
        return feed_type

    <strong i="9">@staticmethod</strong>
    def get_image_type():
        print("get_image_type();")
        feed_type = FeedType.objects.get(pk=2)
        return feed_type

    <strong i="10">@staticmethod</strong>
    def get_video_type():
        print("get_video_type();")
        feed_type = FeedType.objects.get(pk=3)
        return feed_type

    <strong i="11">@staticmethod</strong>
    def get_match_type():
        print("get_match_type();")
        feed_type = FeedType.objects.get(pk=4)
        return feed_type

'''
    IMAGE  FEED
'''
class ImageRelationsMixin(object):

    class FeedManagerMeta:
        image_feed = 'feeds.ImageFeed'

    <strong i="12">@property</strong>
    def Feed(self):
        feed_model_path = getattr(self.FeedManagerMeta, 'feed', 'feeds.ImageFeed')

        #print(django_get_model(*feed_model_path.split('.')))
        return django_get_model(*feed_model_path.split('.'))

class ImageFeedMixin(ImageRelationsMixin, models.Model):
    """ImageFeed represents .

    :Parameters:
      - ``: member's first name (required)
    """
    content_url = models.TextField(null=True, blank=True, default='')

    class Meta:
        abstract = True

    def __unicode__(self):
        return self.post

    def __str__(self):
        return self.post

class ImageFeed(Feed, ImageFeedMixin):

    '''django_user = models.ForeignKey(DjangoUser, null=True, blank=True, on_delete=models.SET_NULL,
                                    related_name='%(app_label)s_%(class)s_set')'''
    django_feed = models.ForeignKey(Feed, null=True, blank=True, on_delete=models.SET_NULL,
                                    related_name='%(app_label)s_%(class)s_set')

    # this is just required for easy explanation
    class Meta(ImageFeedMixin.Meta):
        abstract = False


'''
    Video  FEED
'''
class VideoRelationsMixin(object):

    class FeedManagerMeta:
        video_feed = 'feeds.VideoFeed'

    <strong i="13">@property</strong>
    def Feed(self):
        feed_model_path = getattr(self.FeedManagerMeta, 'feed', 'feeds.VideoFeed')
        #print(django_get_model(*feed_model_path.split('.')))
        return django_get_model(*feed_model_path.split('.'))

class VideoFeedMixin(VideoRelationsMixin, models.Model):
    """VideoFeed represents .

    :Parameters:
      - `media_url`: member's first name (required)
    """
    content_url = models.TextField(null=True, blank=True, default='')

    class Meta:
        abstract = True

    def __unicode__(self):
        return self.post

    def __str__(self):
        return self.post

#Feed di tipo Video
class VideoFeed(Feed, VideoFeedMixin):

    django_feed = models.ForeignKey(Feed, null=True, blank=True, on_delete=models.SET_NULL,
                                    related_name='%(app_label)s_%(class)s_set')

    # this is just required for easy explanation
    class Meta(VideoFeedMixin.Meta):
        abstract = False

これは古典的なview.pyです

<strong i="6">@login_required</strong>
def feeds(request):
    all_feeds = Feed.get_feeds()
    paginator = Paginator(all_feeds, FEEDS_NUM_PAGES)
    feeds = paginator.page(1)
    from_feed = -1
    vip = Feed.get_talentini(request.user)
    user_vip = Feed.get_user_talentino(request.user)

    if feeds:
        from_feed = feeds[0].id
    return render(request, 'feeds/feeds.html', {
        'feeds': feeds,
        'from_feed': from_feed,
        'page': 1,
        'vip':vip,
        'user_vip':user_vip
        })

私は何も解決しませんでした!

screen shot 2017-12-06 at 15 57 52

あなたの要求を完全に理解することはできませんでしたが、あなたがそれを解決してくれてうれしいです。 機能についてはまだわかりませんが、実装するには非常に複雑なパスを選択すると思います。元のフィードモデルを抽象モデルに変換して、他のモデルから継承することもできます。

紛らわしいです、ごめんなさい:(私は知っています

2017-12-06 17:42 GMT + 01:00セバスチャンレイエスエスピノサ<
[email protected]>:

私はあなたの要件を完全に理解することができませんでしたが、私はあなたをうれしく思います
それを解決しました。 機能性、まだ定かではありませんが、あなただと思います
それを実装するために本当に複雑なパスを選択してください、あなたはまた変換することができます
元のフィードモデルを抽象モデルにフィードし、そこから他のモデルを継承します。


スレッドを作成したため、これを受け取っています。
このメールに直接返信し、GitHubで表示してください
https://github.com/vitorfs/bootcamp/issues/131#issuecomment-349699018
またはスレッドをミュートします
https://github.com/notifications/unsubscribe-auth/AVdMg0p3EAdKYXbMA6XV9WuRamCWcUU_ks5s9sQKgaJpZM4Q3oVG

@ sebastian-code他の種類のフィードは一種の息子だからです。

これは管理パネルでの私の例です:)
screen shot 2017-12-06 at 17 17 43
screen shot 2017-12-06 at 17 17 31

共有してくれてありがとう。 前にも言ったように、私はあなたの要件全体とあなたがあなたのプロジェクトに設定した目標を完全に理解することができなかったと思います。 終わったらそれを見るのがいいので、あなたがそれを持っているときに私に知らせてください、おそらくそれから学びそしてここで実装する何かがあります。

@ Allan-Nava私はあなたのようなさまざまな種類のフィードを作成することを計画しています。 連絡先のFacebookまたはSkypeを教えていただけますか?

@feedgit何が必要ですか?

私のSkypeを追加してください:kai_trystan7 :)

このページは役に立ちましたか?
0 / 5 - 0 評価

関連する問題

mwanjajoel picture mwanjajoel  ·  5コメント

norouzzadeh picture norouzzadeh  ·  3コメント

phamminhtris picture phamminhtris  ·  12コメント

ssahilsahil798 picture ssahilsahil798  ·  5コメント

sebastian-code picture sebastian-code  ·  11コメント