0
我正在開發一個API函數,它將返回用戶朋友的列表以及該用戶照片的所有參考。 (雖然我只需要按ord排序的參考)預取一對多關係django ORM
下面是我的模型與外鍵。
class Personimage(models.Model):
photo_uuid = models.CharField(db_column='photoUUID', max_length=100, blank=True,
primary_key=True, default='')
user_id = models.ForeignKey('Member', db_column='userID', on_delete=models.CASCADE, blank=True,
null=True)
ord = models.IntegerField(db_column='ord', blank=True, null=True)
reference = models.CharField(db_column='reference', max_length=200, blank=True, null=True)
class Member(AbstractBaseUser):
user_id = models.CharField(db_column='userID')
class Friends(models.Model):
id = models.IntegerField(db_column='id', primary_key=True, blank=False, null=False)
puser = models.ForeignKey('Member', on_delete=models.CASCADE, db_column='puser')
suser = models.ForeignKey('Member', on_delete=models.CASCADE, db_column='suser',
related_name='secondary_friend')
到目前爲止,我能做到這一點:
friends = Friend.objects.filter(puser=cur_user).prefetch_related('suser')
for r in friends:
photos = Personimage.objects.filter(user_id=r.suser)
united.append({'user_id': r.suser.user_id,
'name': r.suser.name,
'photos': [photo.reference for photo in photos.filter(user_id=r.suser)]})
但你可以形象,是因爲它要對Personimage表呼籲在好友列表中的用戶慢得令人難以置信。我知道有一種方法可以使用prefetch_related或其他一些組合來做到這一點,但我無法找到如何在網上或在我的實驗中做到這一點。我得到的最接近的只是爲朋友中的每個成員返回一張照片。
你爲什麼要建立友模式?將Member = models.ManyToManyField('self')添加到Member類會不會更容易? –
@RomanB。我創建了它,因爲我認爲我需要多對多關係的連接表。我對使用Django ORM –
相當陌生,並且爲什麼要爲每個字段使用db_column?你是否在Django中控制/創建表格,或者你只是試圖在Django中爲現有表格創建一個API?您是否正在尋找解決方案而無需更改表格,或者您可以修改它們以使其更好地工作? –