django - 在 Django 中加入超过 2 个表
问题描述
我正在尝试创建一个新端点,它将返回 3 个表的连接结果(没有模型类)
我尝试加入的 3 个模型是:用户、机构和站点,以显示用户所属站点的名称。
我已经定义了自己的序列化程序,如下所示:
class DashboardSerializer(serializers.Serializer):
id = serializers.CharField(read_only=True)
email = serializers.CharField()
first_name = serializers.CharField()
last_name = serializers.CharField()
full_address = serializers.CharField()
country = serializers.CharField()
status = serializers.CharField()
role = serializers.CharField()
date_joined = serializers.DateTimeField()
institution_id = serializers.CharField()
site_id = serializers.CharField()
site_name = serializers.CharField()
def create(self, validated_data):
pass
def update(self, instance, validated_data):
pass
和视图集:
class DashboardViewSet(viewsets.ModelViewSet):
queryset = User.objects.all().select_related('institution_id').select_related('site_id')
serializer_class = DashboardSerializer
@api_view(['GET'])
def get(self, request):
if request.method == 'GET':
users = User.objects.all().select_related('institution_id').select_related('site_id')
serializer = DashboardSerializer(users, many=True)
return JsonResponse(serializer.data, safe=False)
问题是,当我到达端点时:
select_related 中给出的字段名称无效:“institution_id”、“site_id”。选择是:机构
我不确定这是否是查询、序列化程序或两者都有问题。任何帮助将不胜感激。
解决方案
添加时select_related
,它依赖于字段名称,而不是数据库列名称。在您的模型中,您没有字段institution_id
,而是institution
来源:https ://docs.djangoproject.com/en/2.1/ref/models/querysets/#select-related
另外,据我所知,您不能执行多个级别的select_related
,但您可以使用prefetch_related
.
尝试:
User.objects.all().prefetch_related('institution_set, institution_set__site_set')
推荐阅读
- c - AVR 使用 struct 或 #define 定义引脚
- r - 我如何将列组合在一起但过滤使用 group_by 函数创建的特定组
- powershell - 如何在 PowerShell 中通过 ::parseexact 解析日期时间?
- java - 我需要停止线程吗?
- html - uikit 3.0 - 移动响应式网格
- c# - 如何从 pcl 项目调用远程 wcf
- django - 登录验证 - 错误消息 - 始终相同
- ssl - SSL 重写部分有效。web.config 错误或 nopcommerce 问题?
- javascript - redux 中的初始状态无法正常工作
- html - 即使我删除了边距和填充,我仍然在标题上方有空白