django - 尝试在序列化程序“HealthQuotationSerializer”上获取字段“members”的值时出现 AttributeError
问题描述
尝试序列化父子模型。这是我的模型:
class HealthQuotation(models.Model):
quotation_no = models.CharField(max_length=50)
insuredpersons = models.IntegerField()
mobile_no = models.CharField(max_length=10)
def __str__(self):
return self.quotation_no
class HealthQuotationMember(models.Model):
premium = models.FloatField(null=True)
suminsured = models.FloatField()
quotation = models.ForeignKey(HealthQuotation,on_delete=models.CASCADE)
def __str__(self):
return str(self.quotation)
这是我的序列化程序:
class HealthQuotationMemberSerializer(serializers.ModelSerializer):
class Meta:
model = HealthQuotationMember
fields= "__all__"
class HealthQuotationSerializer(serializers.ModelSerializer):
members = HealthQuotationMemberSerializer(many=True)
class Meta:
model = HealthQuotation
fields = ['id','members']
在使用父序列化程序对父模型进行序列化时,Django 在尝试获取members
序列化程序上的字段值时抛出错误“Got AttributeError” HealthQuotationSerializer
。序列化程序字段可能命名不正确,并且与HealthQuotation
实例上的任何属性或键都不匹配。原始异常文本为:'HealthQuotation ' 对象没有属性”。
解决方案
您有“ HealthQuotation ”作为父级和“ HealthQuotationMember ”作为子级。
现在,您决定从父级“HealthQuotation”
及其关联子级检索数据,这些子级将来自“HealthQuotationMember”,对吗?
为此,您可以使用 Django SerializerMethodField()
:
您的 serializers.py 应如下所示:
class HealthQuotationMemberSerializer(serializers.ModelSerializer):
class Meta:
model = HealthQuotationMember
fields= '__all__'
class HealthQuotationSerializer(serializers.ModelSerializer):
members = serializers.SerializerMethodField() # I am using SerializerMethodField()
class Meta:
model = HealthQuotation
fields = '__all__'
def get_members(self, quotation):
q = HealthQuotationMember.objects.filter(quotation = quotation)
serializer = HealthQuotationMemberSerializer(q, many=True)
return serializer.data
你的意见.py
class GetHealthQuotationList(ListAPIView):
serializer_class = HealthQuotationSerializer
queryset = HealthQuotation.objects.all()
你的 url.py 应该是:
path('get-health-quotation-list', GetHealthQuotationList.as_view()),
注意:如果您计划从child
表中检索数据并找到其关联的parent
,那么您的序列化程序应该可以不用many=True
参数。
推荐阅读
- php - Foreach 导致嵌套 div
- android - React Native Animation(动画)在Android上不起作用
- javascript - communicating variables between go and javascript
- php - My PhP script doesn't write on my MySql database
- xml - Response from spring-boot application in JSON format instead xml?
- google-cloud-datastore - 在 Objectify 查询中使用 Datastore 复合过滤器
- javafx - 如何在两列上显示 PropertySheet
- c++ - asio 定时器的参数 async_wait 差异 lambda、bind、函数指针
- google-chrome-extension - 在不同的网站上创建面板
- arm - 如何使用 ARM XML 机器可读架构规范进行汇编和反汇编?