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?您是否正在寻找解决方案而无需更改表格,或者您可以修改它们以使其更好地工作? –