我使用django rest框架创建的api端点不会输出所有序列化的数据。
InstagramGeograficsSerializer
int main() {
std::vector<Foo> foos = get_foos();
std::vector<Bar> bars = get_bars();
std::vector<int> vec;
auto merge = [](auto const& arg) {return arg.baz;};
std::transform(foos.begin(), foos.end(), std::back_inserter(vec), merge);
std::transform(bars.begin(), bars.end(), std::back_inserter(vec), merge);
}
InstagramEthnicSerializer
class InstagramGeograficsSerializer(serializers.ModelSerializer):
city = InstagramGeoCitySerializer(read_only=True)
class Meta:
model = InstagramGeograficsAnalitics
fields = ('city', 'percentage',)
InstagramDemographicsSerializer
class InstagramEthnicSerializer(serializers.ModelSerializer):
class Meta:
model = InstagramEthnicAnalitics
fields = ('language', 'percentage',)
InstagramSerializer
class InstagramDemographicsSerializer(serializers.ModelSerializer):
class Meta:
model = InstagramDemographicsAnalitics
fields = ('age_group', 'gender', 'percentage', 'full_percentage',)
我的 views.py
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',)
最后,api仅提供有关种族的数据,而不包含有关地理和人口统计
的数据class InstagramDetail(generics.RetrieveAPIView):
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
queryset = Instagram.objects.all()
serializer_class = InstagramSerializer
UPD模型Instagram
{
"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": []
}
InstagramEthnicAnalitics
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)
InstagramDemographicsAnalitics
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)
答案 0 :(得分:2)
您必须告诉InstagramSerailizer在哪里为嵌套序列化器获取数据。
就像您为“种族”所做的一样(这就是返回它的原因)-您必须为其他两个字段指定相关名称。
因此在模型中:
class InstagramDemographicsAnalitics(models.Model):
instagram = models.ForeignKey(Instagram, related_name="demographics")
同样,对于其他模型(您未包括在内)