我希望查询我的数据库并检索字段的所有REAL值。 相反,我得到外键id值。 有人可以帮忙吗?
这是我的models.py:
class Respondant(models.Model):
Respond_Id = models.IntegerField(null=True)
Gender = models.TextField(null=True)
Age = models.TextField(null=True)
Country = models.ForeignKey(Country, related_name="respondant_Country")
Theme = models.ForeignKey(Question, related_name="respondant_Theme")
Question = models.ForeignKey(Question, related_name="respondant_Question")
def __str__(self):
return " Respondant:{} ".format(self.Respond_Id)
RespondantSerializer:
class RespondantSerializer (serializers.ModelSerializer):
class Meta:
model = Respondant
fields=('Respond_Id' ,'Gender' , 'Age', 'Answer')
我的查询在api.py中设置:
class Theme1Api(ListAPIView):
queryset = Respondant.objects.filter(Theme=1)
serializer_class = RespondantSerializer
name = 'theme1'
def get_queryset(self, *args, **kwargs):
Country = self.kwargs['Country']
Question = self.kwargs['Question']
return Respondant.objects.filter(Theme=1).filter(Question=Question).filter(Country=Country)
这是一个输出:
[{"Respond_Id": 258, "Gender": "Female", "Age": "18-21", "Answer": 424},
{"Respond_Id": 258, "Gender": "Female", "Age": "18-21", "Answer": 428}]
答案 0 :(得分:1)
由于您使用的是ModelSerializer
,因此可以使用depth
选项获取关系的嵌套表示。
class RespondantSerializer (serializers.ModelSerializer):
class Meta:
model = Respondant
fields=('Respond_Id' ,'Gender' , 'Age', 'Answer')
depth = 1
此处有更多详情http://www.django-rest-framework.org/api-guide/serializers/#specifying-nested-serialization
如果您想要更多地控制它,您可以创建AnswerSerializer
并使用它来代替
class RespondantSerializer (serializers.ModelSerializer):
Answer = AnswerSerializer()
class Meta:
model = Respondant
fields=('Respond_Id' ,'Gender' , 'Age', 'Answer')
或者,如果您只想要Answer
对象中的值,则可以使用SerializerMethodField
,此处有更多信息http://www.django-rest-framework.org/api-guide/fields/#serializermethodfield
class RespondantSerializer (serializers.ModelSerializer):
Answer = SerializerMethodField()
class Meta:
model = Respondant
fields=('Respond_Id' ,'Gender' , 'Age', 'Answer')
def get_Answer(self, obj):
# get your value from obj.Answer
return obj.Answer.<your_value>