Więc mam model o nazwie post, a jedno z jego pól jest kluczem obcym do modelu użytkownika, i mam inny model o nazwie subskrypcje, który ma 2 klucze obce, jeden odnoszący się do użytkownika, a drugi odwołujący się do innego konta i chcę filtrować zestaw zapytań post, aby wyświetlać tylko posty od osób, dla których istnieje obiekt subskrypcji, w którym użytkownik jest subskrybentem twórcy postu. Moje modele wyglądają tak:

class post(models.Model):
    creator = models.ForeignKey(Account,blank=False,null=False,on_delete=models.CASCADE)
    ...

class subscriptions(models.Model):
    subscriber = models.ForeignKey(Account,blank=False,null=False,on_delete = models.CASCADE, related_name='subscriber')
    subscribed_to = models.ForeignKey(Account,blank=False,null=False,on_delete = models.CASCADE, related_name='subscribed_to')

Próbowałem to zrobić w widokach

posts = post.objects.filter(creator__in = request.user.subscribed_to)

Ale nic nie zwraca

Oto model mojego konta:

class Account(AbstractBaseUser):
    email = models.EmailField(verbose_name='email', max_length=60, unique=True)
    username = models.CharField(max_length=30, unique=True)
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)
    addresse = models.CharField(max_length=60)
    city = models.CharField(max_length=50)
    party_count = models.IntegerField(default=0)
    verified = models.BooleanField(default=False)
    profil_pic = models.ImageField(upload_to='profil_pics/',blank=True)
    birthday = models.DateField(default=date.today())
    date_joined = models.DateTimeField(verbose_name='date_joined', auto_now_add=True)
    last_login = models.DateTimeField(verbose_name='last_login', auto_now=True)
    is_admin = models.BooleanField(default=False)
    is_active = models.BooleanField(default=True)
    is_staff = models.BooleanField(default=False)
    is_superuser = models.BooleanField(default=False)

    USERNAME_FIELD = 'username'
    REQUIRED_FIELDS = ['email','first_name','last_name','addresse','birthday','city']

    objects = MyAccountManager()

    def __str__(self):
        return self.username

    def has_perm(self, perm, obj=None):
        return self.is_admin

    def has_module_perms(self,app_label):
        return True
1
Messaoudi_06 13 marzec 2020, 02:36

2 odpowiedzi

Najlepsza odpowiedź

Możesz rozwiązać to jednym zapytaniem.

Post.objects.filter(creator__subscribed_to__subscriber=request.user)
1
randy 13 marzec 2020, 12:44

Po przeprowadzeniu pewnych badań znalazłem informacje, które prowadzą do:

subs = subscriptions.objects.filter(subscriber=request.user).values_list('subscribed_to')
posts = post.objects.filter(creator__in = subs
0
Messaoudi_06 13 marzec 2020, 11:58