我似乎无法弄清楚如何在Django中序列化一对多关系,该信息似乎甚至都没有出现。
我的模特
class DataInfo(models.Model):
component_id = models.CharField(max_length=4)
component_name = models.CharField(max_length=255)
data_id = models.IntegerField()
data_name = models.CharField(max_length=255)
class Data(models.Model):
owner = models.ForeignKey(User, on_delete=models.CASCADE, related_name='data_owner')
subject = models.CharField(max_length=255)
init_date = models.DateField()
fin_date = models.DateField()
data_info = models.ForeignKey(DataInfo, related_name="datainfo", on_delete=models.CASCADE)
我的观点
class DataViewSet(viewsets.ModelViewSet):
serializer_class = serializers.DataSerializer
def list(self, request):
data = models.Data.objects.using(db_to_use).select_related('data_info').all()
return Response(self.get_serializer(data, many=True).data)
我的序列化器
class DataInfoSerializer(serializers.ModelSerializer):
class Meta:
model = models.DataInfo
fields = ('id', 'component_id', 'component_name', 'data_id', 'data_name')
class DataSerializer(serializers.ModelSerializer):
datainfo = DataInfoSerializer(source="datainfo", read_only=True)
class Meta:
model = models.Data
fields = ('id', 'subject', 'init_date', 'fin_date', 'owner_id', 'data_info_id', 'datainfo')
我实质上只是想在Data和DataInfo之间进行联接,在一个视图(未嵌套)中显示Data和DataInfo的所有字段。我试着做一个select_related,把一个source属性,似乎没有任何工作。我得到的响应只是Data表的所有字段,而DataInfo表没有任何字段。我在序列化方面缺少什么吗?
答案 0 :(得分:2)
您是否尝试过将many=True
添加到DataInfoSerializer
的位置?
也就是说,
class DataSerializer(serializers.ModelSerializer):
datainfo = DataInfoSerializer(source="datainfo", read_only=True, many=True)
# ...
(顺便说一句,Data
,DataInfo
,data_info
和datainfo
是非常糟糕的名称。特别是related_name
应该是复数形式,或者表示复数,除非它们在OneToOneFields上。)