Semua orang. Saya ingin menerapkan fungsi "mengikuti" pada model Profil saya di Django. saya memiliki model hubungan dan saya ingin bergabung dengan kedua bidang sehingga saya dapat memilih pengguna yang membuat kueri.

Saya tahu peewee dan saya akan melakukan sesuatu seperti berikut:

def following(self):
    return ( User.select().join(Relationship, 
            on=Relationship.to_user).where(Relationship.from_user == self))

Tetapi saya belum dapat menemukan cara membuat kueri bergabung di Django.
Ini adalah model yang saya miliki di models.py

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    joined_at = models.DateTimeField()

    class Meta:
        ordering = ['-joined_at']

    def __str__(self):
        return f'{self.user.username} profile' 

    def following(self):
        """ I want to implement the query here. """

class Relationship(models.Model):
    from_user = ForeignKey(User, related_name='relationships')
    to_user = ForeignKey(User, related_name='related_to')
0
Leo Fernando 3 September 2020, 06:20

1 menjawab

Jawaban Terbaik

Anda dapat mencoba dengan ini;

def following(self):
    """ return list objects of User followings """
    return Relationship.filter(from_user=self.user)\
                       .values_list('to_user', flat=True)

Tapi, saya harus mengembalikannya sebagai queryset, bagaimana caranya?

def following(self):
    """ this will return as `User` queryset """
    user_ids = Relationship.filter(from_user=self.user)\
                           .values_list('to_user_id', flat=True)
    return User.objects.filter(id__in=user_ids)
0
binpy 3 September 2020, 04:30