Фильтрация внешних ключей в Django 2.0 - PullRequest
0 голосов
/ 28 апреля 2018

Поэтому мне нужно отфильтровать записи, опубликованные пользователями, за которыми следит пользователь, вошедший в данный момент.

Вот мои модели:

class ProfileDetails(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
    provider = models.CharField(max_length=20, null=True, blank=True)
    firstname = models.CharField(max_length=25, null=True, blank=True)
    lastname = models.CharField(max_length=25, null=True, blank=True)
    username = models.CharField(max_length=24, null=True, blank=True, unique=True)

    def __str__(self):
        return str(self.user)


class Posts(models.Model):
    post_id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    user = models.ForeignKey(ProfileDetails, on_delete=models.CASCADE, null=True)
    text = models.TextField(max_length=280, null=True, blank=True)
    video = models.CharField(max_length=24, null=True, blank=True)
    timestamp = models.DateTimeField(default=datetime.datetime.now, blank=True)

    def __str__(self):
        return str(self.user)


class Connection(models.Model):
    follower = models.ForeignKey(ProfileDetails, related_name='follower', on_delete=models.SET_NULL, null=True)
    following = models.ForeignKey(ProfileDetails, related_name='following', on_delete=models.SET_NULL, null=True)
    # follower = models.ManyToManyField(ProfileDetails, related_name='follower')
    # following = models.ManyToManyField(ProfileDetails, related_name='following')
    date_created = models.DateTimeField(auto_now_add=True, null=True)

    def __str__(self):
        return str(self.follower)

И затем, на мой взгляд, мои знания Python / Django побудили меня написать что-то вроде этого (взгляните особенно на последний бит, где я пытаюсь отфильтровать его, чтобы он получал информацию только от пользователей, которых я следовать.

def index(request):
    checkuser = request.user
    print(checkuser)
if ProfileDetails.objects.filter(user=checkuser):
            print("user previously logged in")
            sns = get_object_or_404(SocialAccount, user=checkuser)
            autoupdateprofile = get_object_or_404(ProfileDetails, user=checkuser)
            autoupdateprofile.lastlogin = datetime.datetime.now()
            autoupdateprofile.save(update_fields=["lastlogin"])

            # print(sns.provider)

            details = get_object_or_404(ProfileDetails, user=checkuser)
            videos = Posts.objects.filter(media=True, imade=True).order_by("-timestamp")[0:6]
            followercount = Connection.objects.filter(follower=details).count()
            follows = Connection.objects.filter(follower=details)

            followerposts = Posts.objects.filter(user=follows)



            for a in followerposts:

                print(a)

return render (request, 'index.html', context)

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

Exception Value:    
Cannot use QuerySet for "Connection": Use a QuerySet for "ProfileDetails".

Несколько дней боролся с этим и уже не знал, что искать.

Если это имеет какое-то значение, я использую Python 3.6 и Django 2.0.4 на Postgresql.

Предложения будут оценены. :)

Заранее спасибо. Рональд

1 Ответ

0 голосов
/ 28 апреля 2018

Этот код входит и выбирает все сообщения от пользователей, за которыми следует текущий пользователь (т. Е. Для которых текущий пользователь является follower):

Posts.objects.filter(user__following__follower=ProfileDetails.objects.get(user=self.request.user))
...