django - 组合 2 个模型时在 Django 序列化程序上出现关键错误
问题描述
美好的一天。我想在一个 django 序列化程序中组合两个模型。我只想先把它们放在一个序列化程序中,剩下的我可以做。基于其他 SO question,我需要首先声明一个序列化程序并将其添加到我的第二个序列化程序中。但这给了我一个错误。我以为我只需要使用专业这个词并将其声明到我的次要领域。
class PrefectureMajorSerializer(serializers.ModelSerializer):
id = serializers.IntegerField()
text = serializers.CharField(source='prefecture_name')
class Meta:
model = PrefectureMajor
fields = ["id", "text"]
class PrefectureSerializer(serializers.ModelSerializer):
id = serializers.IntegerField()
text = serializers.CharField(source='prefecture_name')
major = PrefectureMajorSerializer()
class Meta:
model = PrefectureMinor
fields = ['id', 'text', 'prefecture_major_id', 'major']
楷模:
class PrefectureMajor(models.Model):
prefecture_name = models.CharField(max_length=100, default='', null=False)
is_active = models.BooleanField(default=True, null=False)
def __str__(self):
return self.prefecture_name
class PrefectureMinor(models.Model):
prefecture_major = models.ForeignKey("PrefectureMajor", related_name="PrefectureMinor.prefecture_name +", on_delete=models.CASCADE)
prefecture_name = models.CharField(max_length=100, default='', null=False)
is_active = models.BooleanField(default=True, null=False)
def __str__(self):
return self.prefecture_name
回溯错误消息:
C:\Users\SOMEPATH\.virtualenvs\DjangoProjects-k8989gUR\lib\site-packages\rest_framework\fields.py, line 457, in get_attribute
return get_attribute(instance, self.source_attrs) …
▼ Local vars
Variable Value
instance
{'id': 1, 'is_active': True, 'prefecture_major_id': 2, 'prefecture_name': '北海道'}
msg
('Got KeyError when attempting to get a value for field `major` on serializer '
'`PrefectureSerializer`.\n'
'The serializer field might be named incorrectly and not match any attribute '
'or key on the `dict` instance.\n'
"Original exception text was: 'perfecture_major'.")
self
PrefectureMajorSerializer(source='perfecture_major'):
id = IntegerField()
text = CharField(source='prefecture_name')
C:\Users\SOMEPATH\.virtualenvs\DjangoProjects-k8989gUR\lib\site-packages\rest_framework\fields.py, line 95, in get_attribute
instance = instance[attr] …
▼ Local vars
Variable Value
attr
'perfecture_major'
attrs
['perfecture_major']
instance
{'id': 1, 'is_active': True, 'prefecture_major_id': 2, 'prefecture_name': '北海道'}
看法:
def get_all_prefectures(request):
prefecture_list = PrefectureMinor.objects.filter(is_active=True).order_by("id").values()
prefecture_serializer = PrefectureSerializer(prefecture_list, many=True)
data = prefecture_serializer.data
return JsonResponse(data, safe=False)
解决方案
推荐阅读
- c# - 从嵌套列表视图中获取单击行的索引 - UWP
- javascript - 在 React 中使用动态键设置状态
- python - 在 x 轴上绘制日期失败并扩展到子图
- sql-server-2008 - 机器人框架 - 连接到 MS SQL 数据库 - 登录错误
- javascript - 使用 JavaScript 执行器连接可变字符串
- arrays - 如何连接以逗号分隔的命名范围的返回值
- mysql - B树的最小占用率是多少?
- c# - 如何从 Ninja Trader 的操作中使用 C# 制作 JSON 帖子?
- javascript - 如何在运行测试用例之前正确初始化/加载 aurelia-dialog 插件?
- google-chrome - 将不安全的来源视为安全