【发布时间】:2018-05-05 06:06:10
【问题描述】:
我有以下型号:
class STUser(AbstractBaseUser):
email = models.EmailField(unique=True)
name = models.CharField(max_length=255)
...
class VenuePermissions(models.Model):
user = models.ForeignKey(STUser, on_delete=models.CASCADE)
venue = models.ForeignKey(Venue, on_delete=models.CASCADE, blank=True, null=True)
...
class Venue(models.Model):
name = models.CharField(max_length=100)
description = models.CharField(max_length=1500, null=True, blank=True)
...
然后我将相关的venuepermission 对象预取到视图中的STUser 对象
class VenueUserList(APIView):
def get(self, request, *args, **kwargs):
objects = STUser.objects.prefetch_related('venuepermissions_set').all()
...
然后我想获取返回的查询集并将venue FK 替换为它们的对象。
for item in objects:
for permission in item_venuepermissions_set:
permission_venue = Venue.objects.get(pk=permission_venue)
print(repr(objects))
...
return Response({})
但我的方法显然是错误的。如何正确访问查询集的字段并更改其值?
如您所见,我需要做两次。一次访问当前对象权限集,然后再次访问该权限集场地字段并覆盖它。
我不希望任何这些更改数据库。这只是为了返回值。
更新:
我进行了以下更改以访问各个字段:
for item in objects:
for permission in item.venuepermissions_set:
permission.venue = Venue.objects.get(pk=permission.venue)
print(repr(objects))
return Response({})
我遇到的新错误是:
TypeError: 'RelatedManager' object is not iterable
试图解决
【问题讨论】:
标签: django django-rest-framework iteration django-queryset prefetch