私はすべての顧客データと回答とコメントを取得したいと思います。 これはmodel.py'ListSerializer'タイプのオブジェクトがJSONシリアライズ可能ではありません
class Customer(models.Model):
name = models.CharField(max_length=200)
email_address = models.CharField(max_length=200)
phone_number = models.CharField(max_length=20)
age = models.SmallIntegerField(default=14)
remarks = models.ManyToManyField(Remark,null=True,blank=True)
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return str(self.id)
class Response(models.Model):
question = models.ForeignKey(Question)
customer = models.ForeignKey(Customer)
response_text = models.CharField(max_length=100, null=True, blank=True)
created_at = models.DateTimeField(auto_now_add=True)
uuid = models.UUIDField()
def __str__(self):
return str(self.id)
これはserializers.py
class ResponseSerializer(ModelSerializer):
class Meta:
model = Response
fields = '__all__'
class RemarksSerializer(ModelSerializer):
class Meta:
model = Remark
fields = '__all__'
class CustomerInformationSerializer(ModelSerializer):
remarks = RemarksSerializer(many=True)
responses = serializers.SerializerMethodField()
def get_responses(self, obj):
responses = Response.objects.filter(customer=obj)
return ResponseSerializer(responses, many=True)
class Meta:
model = Customer
fields = ('name', 'email_address', 'phone_number', 'age', 'remarks', 'responses')
これはservices.py
def customer_information(company_id=1):
cus = Customer.objects.filter(remarks__company_id=company_id)
return CustomerInformationSerializer(cus, many=True).data
これはviews.py
class CustomerInformationView(APIView):
def get(self, request):
company_id = request.GET.get('company_id', 1)
resp = {'data': customer_information(company_id)}
return Response(data=resp, status=status.HTTP_200_OK)
これであるですis url.py
url(r'^customer/$', CustomerInformationView.as_view()),
この問題が発生しています。どうすればこの問題を解決できますか?親切に私を導く。
なぜ低レベルのAPIViewを使用していますか?より高いレベルのビューがここでより適していると思われ、あなたはservices.pyを必要としません。 RetrieveViewを見てください –
'return ResponseSerializer(respond、many = True)'に失敗しました。あなたのserializermethodfieldの 'get_responses'から.dataを追加するだけです。 –
@TheBrewmaster高いレベルのビュー????? –