Bootcamp: Nourrir avec différents types de flux

Créé le 6 déc. 2017  ·  9Commentaires  ·  Source: vitorfs/bootcamp

J'essaie de mettre en œuvre 3 types de flux :

  1. Statut (fil de messages)
  2. Flux vidéo
  3. Flux d'images

J'utilise la classe d'alimentation, le type d'alimentation et pour chaque type d' une classe spécifique , mais je ne sais pas comment connecter la classe d'alimentation avec chaque classe de type (classe vidéo, classe d'image)

Toute suggestion?

Je vous remercie pour le soutien

Support enhancement question

Tous les 9 commentaires

@sebastian-code Je réalise cette fonctionnalité, mais je ne sais pas comment puis-je obtenir les champs supplémentaires du flux d'images ou du flux vidéo à l'intérieur de la vue.

C'est mon 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

C'est classique 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
        })

Rien que j'ai résolu !

screen shot 2017-12-06 at 15 57 52

Je n'ai pas pu comprendre complètement votre exigence, mais je suis heureux que vous l'ayez résolu. La fonctionnalité, je n'en suis pas encore certain, mais je pense que vous choisissez un chemin vraiment complexe pour l'implémenter, vous pouvez également transformer le modèle Feed d'origine en un modèle abstrait et en hériter les autres.

C'est déroutant, désolé :( je sais

06/12/2017 17:42 GMT":" Sebastian Reyes Espinosa <
[email protected]> :

Je n'ai pas pu comprendre complètement votre exigence, mais je suis heureux que vous
résolu. La fonctionnalité, je n'en suis pas encore certain, mais je pense que vous
choisir un chemin vraiment complexe pour le mettre en œuvre, vous pouvez également transformer le
modèle original Feed à un modèle abstrait et hériter de celui-ci les autres.

-
Vous recevez ceci parce que vous avez créé le fil.
Répondez directement à cet e-mail, consultez-le sur GitHub
https://github.com/vitorfs/bootcamp/issues/131#issuecomment-349699018 ,
ou couper le fil
https://github.com/notifications/unsubscribe-auth/AVdMg0p3EAdKYXbMA6XV9WuRamCWcUU_ks5s9sQKgaJpZM4Q3oVG
.

@sebastian-code Parce que les autres types de flux sont en quelque sorte des fils..

Ceci est mon exemple dans le panneau d'administration :)
screen shot 2017-12-06 at 17 17 43
screen shot 2017-12-06 at 17 17 31

Ça a l'air vraiment sympa, merci pour le partage; comme je l'ai déjà dit, je pense que je n'ai pas été en mesure de comprendre pleinement l'ensemble de vos besoins et les objectifs que vous vous êtes fixés pour votre projet. Ce serait bien de le voir une fois terminé, alors faites le moi savoir quand vous l'aurez, peut-être y a-t-il quelque chose à apprendre et à mettre en œuvre ici.

@Allan-Nava Je prévois de créer différents types de flux comme vous. Pourriez-vous me partager votre contact facebook ou skype ?

@feedgit De quoi avez-vous besoin ?

Veuillez ajouter mon Skype : kai_trystan7 :)

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

sebastian-code picture sebastian-code  ·  11Commentaires

mwanjajoel picture mwanjajoel  ·  5Commentaires

norouzzadeh picture norouzzadeh  ·  3Commentaires

Allan-Nava picture Allan-Nava  ·  14Commentaires

sebastian-code picture sebastian-code  ·  11Commentaires