python - Django Rest Framework 从相关表中获取数据
问题描述
我有一个数据库表,这与这些卡所属的cards
另一个表有关系。sets
这些Cards
表有一个外键,set_id
它将两个表链接在一起。当我返回卡片数据时,我正在努力返回卡片所属集合的相关数据。
模型.py
class Set(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
code = models.CharField(max_length=64)
...
objects = models.Manager()
def __str__(self):
return self.name
class Card(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
...
set = models.ForeignKey(Set, on_delete=models.CASCADE, related_name='cards', related_query_name='cards')
objects = models.Manager()
def __str__(self):
return self.name
@property
def manaCostList(self):
a0 = self.manaCost.replace('//', '{//}')
a1 = a0.split('{')
a2 = [s.strip('} ') for s in a1]
a3 = [s.replace('//', 'slash') for s in a2]
a4 = [s.replace('/', '') for s in a3]
a5 = list(filter(None, a4))
return a5
序列化程序.py
class SetSerializers(serializers.ModelSerializer):
class Meta:
model = Set
fields = '__all__'
class CardSerializers(serializers.ModelSerializer):
cards = SetSerializers(many=True, read_only=True)
class Meta:
model = Card
fields = '__all__'
extra_fields = ['cards', 'manaCostList']
def get_field_names(self, declared_fields, info):
expanded_fields = super(CardSerializers, self).get_field_names(declared_fields, info)
if getattr(self.Meta, 'extra_fields', None):
return expanded_fields + self.Meta.extra_fields
else:
return expanded_fields
在我的 JavaScript 中,当我执行 a 时console.log(b)
,表中没有数据Sets
。
解决方案
我设法让它工作。我已经替换cards = SetSerializers(many=True, read_only=True)
为setCode = serializers.CharField(read_only=True, source="set.code")
.
这会添加一个setCode
从父表调用到响应的字段。
class CardSerializers(serializers.ModelSerializer):
setCode = serializers.CharField(read_only=True, source="set.code")
class Meta:
model = Card
fields = '__all__'
extra_fields = ['setCode', 'manaCostList']
def get_field_names(self, declared_fields, info):
expanded_fields = super(CardSerializers, self).get_field_names(declared_fields, info)
if getattr(self.Meta, 'extra_fields', None):
return expanded_fields + self.Meta.extra_fields
else:
return expanded_fields
推荐阅读
- highcharts - Highcharts,类型:列,x 轴线阻塞了列的某些部分,这使得一些接近 0 的值不可见
- r - (Anova)DCR 与使用 R 的子样本
- robotframework - 机器人框架:IF/ELSE - 在另一个关键字中使用关键字
- c++ - 好友会员功能无法访问私人会员数据
- visual-studio - 当请求是本地主机/站点根目录时如何为 IIS 添加无缓存标头
- python - 如何为 python setter 提供有效的文档字符串或帮助?
- azure - 如何使用专用终结点通过 VPN 网关连接到 Azure SQL 数据库
- shell - 使用 Oozie 检查 HDFS 位置中是否存在大小大于零的文件
- python - 如何使用只有 3 行的 python tkinter 制作 Treeview。默认情况下会显示包含多行的树视图
- c - 链表函数在正常调用时有效,但在IF语句中调用时不起作用?