如果使用 prefetch_related django,则清空 M2M 数据
Empty M2M data if using prefetch_related django
我将 Django 与 DRF 一起使用,但遇到了 N+1 问题。所以,我现在尝试使用 prefetch_related,但我遇到了一些问题。 prefetch_related returns 在任何情况下都为空查询集。
我正在使用:
- Django 3.0.7
- Djongo(MongoDB 的 Django 数据库后端)
- DRF(最新版本)
我尝试在 MySQL 上切换我的项目,但没有帮助
DRF Test query
@api_view(['GET'])
@permission_classes([AllowAny])
def test_prefetch(request):
users = User.objects.prefetch_related('roles').filter(id=4) # id=4 it's my account which has roles
print(users[0].roles.all()) # returns []
print(users[0]._prefetched_objects_cache) # returns {"roles": []}
return Response(123, status=200)
Models
class UserRoles(models.Model):
user = models.ForeignKey(to="User", on_delete=models.DO_NOTHING, default=None)
role_type = models.CharField(default="", max_length=256)
given_at = models.DateTimeField(default=api.functions.get_local_time)
expires_at = models.DateTimeField(default=api.functions.get_local_time, null=True)
def __str__(self):
return self.role_type
class User(AbstractBaseUser, PermissionsMixin):
....
roles = models.ManyToManyField(UserRoles, symmetrical=True)
已修复。问题出在 Djongo。我将我的项目切换到 PostgreSQL 上,它现在可以工作了。
我将 Django 与 DRF 一起使用,但遇到了 N+1 问题。所以,我现在尝试使用 prefetch_related,但我遇到了一些问题。 prefetch_related returns 在任何情况下都为空查询集。
我正在使用:
- Django 3.0.7
- Djongo(MongoDB 的 Django 数据库后端)
- DRF(最新版本)
我尝试在 MySQL 上切换我的项目,但没有帮助
DRF Test query
@api_view(['GET'])
@permission_classes([AllowAny])
def test_prefetch(request):
users = User.objects.prefetch_related('roles').filter(id=4) # id=4 it's my account which has roles
print(users[0].roles.all()) # returns []
print(users[0]._prefetched_objects_cache) # returns {"roles": []}
return Response(123, status=200)
Models
class UserRoles(models.Model):
user = models.ForeignKey(to="User", on_delete=models.DO_NOTHING, default=None)
role_type = models.CharField(default="", max_length=256)
given_at = models.DateTimeField(default=api.functions.get_local_time)
expires_at = models.DateTimeField(default=api.functions.get_local_time, null=True)
def __str__(self):
return self.role_type
class User(AbstractBaseUser, PermissionsMixin):
....
roles = models.ManyToManyField(UserRoles, symmetrical=True)
已修复。问题出在 Djongo。我将我的项目切换到 PostgreSQL 上,它现在可以工作了。