Получение объектов - PullRequest
       7

Получение объектов

1 голос
/ 07 апреля 2020

Я создал функцию GET, которая будет извлекать сообщения и делать их доступными только для конкретного пользователя, а также для его списка друзей. Чтобы сделать эту работу частично, я разработал необработанный запрос, чтобы получить желаемый результат, и каким-то образом он отлично работает для меня.

Теперь я пытаюсь научиться делать запросы в django без реализации необработанного запроса, поэтому Я пытаюсь максимизировать Django ORM и не использовать необработанный запрос, но я немного застрял и все время удивляюсь, как я смогу заставить мой набор запросов работать без использования необработанного запроса.

это мой необработанный запрос запрос:

 FeedMedia.objects.raw("""SELECT DISTINCT feed_media.*
            FROM feed_media
            INNER JOIN feed ON feed_media.feed_id = feed.id
            INNER JOIN media ON feed_media.media_id = media.id
            INNER JOIN profile ON profile.id = feed.profile_id
            INNER JOIN gosam_friend_profile ON gosam_friend_profile.profile_id = feed.profile_id
            INNER JOIN friendship_friend ON friendship_friend.id = gosam_friend_profile.gosam_friend_id
            WHERE friendship_friend.to_user_id = %(friend)s
            OR gosam_friend_profile.profile_id = %(profile)s""",
                                           params={'friend': request.user.pk, 'profile': profile.pk})

Модель FeedMedia:

 # Junction Table for Feed and Media
 class FeedMedia(models.Model):
   media = models.ForeignKey(Media, on_delete=models.CASCADE, null=False)
   feed = models.ForeignKey(Feed, on_delete=models.CASCADE, null=False)

   class Meta:
      db_table = 'feed_media'

Модель фида:

class Feed(models.Model):
   profile = models.ForeignKey(Profile, on_delete=models.CASCADE, null=False)
   message = models.CharField(max_length=200, null=False, unique=False)
   type = models.CharField(max_length=50, null=False, unique=False)
   category = models.CharField(max_length=50, null=False, unique=False)
   priority_level = models.IntegerField(default=0, null=False, unique=False)
   origin_location = models.CharField(max_length=100, null=False, unique=False)
   created_at = models.DateTimeField(auto_now_add=True)

   class Meta:
     db_table = 'feed'

Модель GosamFriendProfile:

# Junction Table for Gosam Friends and Profile
class GosamFriendProfile(models.Model):
     gosam_friend = models.ForeignKey(Friend, on_delete=models.CASCADE, null=False)
     profile = models.ForeignKey(Profile, on_delete=models.CASCADE, null=False)

     class Meta:
        db_table = 'gosam_friend_profile'
  • Дружба / дружба принадлежит django дружбе
...