Bootcamp: Füttern Sie mit verschiedenen Futterarten

Erstellt am 6. Dez. 2017  ·  9Kommentare  ·  Quelle: vitorfs/bootcamp

Ich versuche, 3 Arten von Feeds zu implementieren:

  1. Status (Nachrichtenfeed)
  2. Video-Feed
  3. Bild-Feed

Ich verwende die Feedklasse , den Feedtyp und für jeden Typ eine bestimmte Klasse, weiß aber nicht, wie ich die Feedklasse mit jeder Typklasse (Videoklasse, Bildklasse) verbinden soll.

Irgendein Vorschlag?

Danke für die Unterstützung

Support enhancement question

Alle 9 Kommentare

@sebastian-code Ich kenne diese Funktion, weiß aber nicht, wie ich die zusätzlichen Felder aus dem Bild- oder Video-Feed in die Ansicht bekomme.

Das ist mein 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

Dies ist die klassische Ansicht.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
        })

Nichts was ich gelöst habe!

screen shot 2017-12-06 at 15 57 52

Ich konnte Ihre Anforderung nicht ganz nachvollziehen, aber ich freue mich, dass Sie sie gelöst haben. Bei der Funktionalität bin ich mir noch nicht sicher, aber ich denke, Sie wählen einen wirklich komplexen Weg, um sie zu implementieren. Sie könnten auch das ursprüngliche Feed-Modell in ein abstraktes Modell umwandeln und die anderen davon erben.

Ist verwirrend, sorry :( ich weiß

2017-12-06 17:42 GMT+01:00 Sebastian Reyes Espinosa <
[email protected]>:

Ich konnte dein Anliegen nicht ganz nachvollziehen, aber ich freue mich über dich
Ich habe es gelöst. Über die Funktionalität bin ich mir noch nicht sicher, aber ich denke du
Wählen Sie einen wirklich komplexen Weg, um ihn zu implementieren
original Feed-Modell in ein abstraktes Modell und erben davon die anderen.


Sie erhalten dies, weil Sie den Thread verfasst haben.
Antworten Sie direkt auf diese E-Mail und zeigen Sie sie auf GitHub an
https://github.com/vitorfs/bootcamp/issues/131#issuecomment-349699018 ,
oder den Thread stumm schalten
https://github.com/notifications/unsubscribe-auth/AVdMg0p3EAdKYXbMA6XV9WuRamCWcUU_ks5s9sQKgaJpZM4Q3oVG
.

@sebastian-code Weil die anderen Arten von Feeds eine Art Sohn sind..

Dies ist mein Beispiel im Admin-Panel :)
screen shot 2017-12-06 at 17 17 43
screen shot 2017-12-06 at 17 17 31

Es sieht wirklich gut aus, danke fürs Teilen; Wie ich bereits sagte, konnte ich Ihre Anforderungen und die Ziele, die Sie sich für Ihr Projekt gesetzt haben, nicht vollständig verstehen. Es wäre schön, wenn es fertig ist, also lass es mich wissen, wenn du es hast, vielleicht gibt es etwas daraus zu lernen und hier umzusetzen.

@Allan-Nava Ich plane, verschiedene Arten von Feeds wie Sie zu erstellen. Könnten Sie mir Ihren Kontakt Facebook oder Skype teilen?

@feedgit Was brauchst du?

Bitte fügen Sie mein Skype hinzu: kai_trystan7 :)

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

Shekharnunia picture Shekharnunia  ·  10Kommentare

yashLadha picture yashLadha  ·  21Kommentare

mwanjajoel picture mwanjajoel  ·  5Kommentare

phamminhtris picture phamminhtris  ·  12Kommentare

ssahilsahil798 picture ssahilsahil798  ·  5Kommentare