DRF:Api端点不会输出所有数据



使用django-rest框架创建的我的api端点不会输出所有序列化的数据。

InstagramGeograficsSerializer

class InstagramGeograficsSerializer(serializers.ModelSerializer):
city = InstagramGeoCitySerializer(read_only=True)
class Meta:
model = InstagramGeograficsAnalitics
fields = ('city', 'percentage',)

InstagramEthnicSerializer

class InstagramEthnicSerializer(serializers.ModelSerializer):
class Meta:
model = InstagramEthnicAnalitics
fields = ('language', 'percentage',)

InstagramDemographicsSerializer

class InstagramDemographicsSerializer(serializers.ModelSerializer):
class Meta:
model = InstagramDemographicsAnalitics
fields = ('age_group', 'gender', 'percentage', 'full_percentage',)

InstagramSerializer

class InstagramSerializer(serializers.HyperlinkedModelSerializer):
geographics = InstagramGeograficsSerializer(many=True, read_only=True)
demographics = InstagramDemographicsSerializer(many=True, read_only=True)
ethnic = InstagramEthnicSerializer(many=True, read_only=True)
class Meta:
model = Instagram
fields = ('id', 'userid', 'username', 'full_name', 'avatar', 'bio',
'website', 'media_count', 'follows_count',
'subscriber_count', 'engagement_rate', 'approval_rate',
'discussion_rate', 'male_percentage', 'female_percentage', 'geographics', 'demographics', 'ethnic',)

我的视图.py

class InstagramDetail(generics.RetrieveAPIView):
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
queryset = Instagram.objects.all()
serializer_class = InstagramSerializer

最后,api只提供了种族的数据,而不包含地理人口统计的数据

{
"count": 2,
"next": null,
"previous": null,
"results": [
{
"id": 2,
"userid": "3045727148",
"username": "test2",
"full_name": "full name",
"avatar": "",
"bio": "23",
"website": "",
"media_count": 0,
"follows_count": 0,
"subscriber_count": 0,
"engagement_rate": "0.0000000",
"approval_rate": "0.0000000",
"discussion_rate": "0.0000000",
"male_percentage": "0.000",
"female_percentage": "0.000",
"ethnic": []
}

UPD模型Instagram

class Instagram(models.Model):
class Meta:
permissions = (
('view_all_instagram', 'Can view all instagram'),
('change_all_instagram', 'Can change all instagram'),
)
credential = CredentialsField()
userid = models.CharField(max_length=255, unique=True)
platform = GenericRelation(Platform,
related_query_name='instagram_platform',
content_type_field='content_type',
object_id_field='object_id')
username = models.CharField(max_length=50, blank=True, null=True)
full_name = models.CharField(max_length=50, blank=True, null=True)
avatar = models.URLField(max_length=512, blank=True, null=True)
bio = models.CharField(max_length=255, blank=True, null=True)
website = models.URLField(max_length=255, blank=True, null=True)
city = models.CharField(max_length=255, blank=True, null=True)
media_count = models.PositiveIntegerField(blank=True, default=0)
follows_count = models.PositiveIntegerField(blank=True, default=0)
subscriber_count = models.PositiveIntegerField(blank=True, default=0)
engagement_rate = models.DecimalField(default=0, max_digits=14, decimal_places=7)
approval_rate = models.DecimalField(default=0, max_digits=14, decimal_places=7)
discussion_rate = models.DecimalField(default=0, max_digits=14, decimal_places=7)
male_percentage = models.DecimalField(default=0, max_digits=5, decimal_places=3)
female_percentage = models.DecimalField(default=0, max_digits=5, decimal_places=3)

InstagramEthnicAnalytics

class InstagramEthnicAnalitics(models.Model):
class Meta:
permissions = (
(
'view_all_instagram_ethnic_analytics',
'Can view all_instagram_ethnic_analytics'
),
(
'change_all_instagram_ethnic_analytics',
'Can change all_instagram_ethnic_analytics'
),
)
instagram = models.ForeignKey(Instagram, related_name='ethnic')
language = models.CharField(max_length=20)
percentage = models.DecimalField(default=0, max_digits=5, decimal_places=3)

Instagram人口统计分析

class InstagramDemographicsAnalitics(models.Model):
class Meta:
#unique_together = (('instagram', 'age_group', 'gender', ),)
permissions = (
(
'view_all_instagram_demographics_analytics', 
'Can view all_instagram_demographics_analytics'
),
(
'change_all_instagram_demographics_analytics',
'Can change all_instagram_demographics_analytics'
),
)
instagram = models.ForeignKey(Instagram)
age_group = models.CharField(max_length=50)
gender = models.CharField(max_length=10, default='female')
percentage = models.DecimalField(default=0, max_digits=5, decimal_places=3)
is_full_gender = models.BooleanField(default=False)
full_percentage = models.DecimalField(default=0, max_digits=5, decimal_places=2)

您必须告诉InstagramSerilizer在哪里为嵌套序列化程序获取数据。

因此,就像您对"种族"所做的那样(这就是它被返回的原因(,您必须为其他两个字段指定相关的名称。

所以在模型中:

class InstagramDemographicsAnalitics(models.Model):
instagram = models.ForeignKey(Instagram, related_name="demographics")

同样,对于其他型号(您没有包括(

最新更新