Я создал функцию 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 дружбе