【发布时间】:2020-05-18 11:18:06
【问题描述】:
我对代码有以下响应:
{
"id": 716,
"name": "XYZ",
"start_date": "2019-12-24",
"end_date": "2020-01-31",
"ads": [
{
"id": 20228,
"no_of_times_per_hr": 1,
},
{
"id": 20227,
"no_of_times_per_hr": 2
},
{
"id": 20229,
"no_of_times_per_hr": 7
}
]
},
我使用序列化程序编写了以下代码:
class AdsDetailOnScheduler(serializers.ModelSerializer):
ads = serializers.SerializerMethodField()
class Meta:
model = AdCampaign
fields = ('id','name','start_date','end_date', 'ads')
def get_ads(self, obj):
adlabels = AdDayLabelMap.objects.filter(ad_campaign__id = obj['id']).values_list('ad_label', flat = True).distinct()
ad_id = AdSlot.objects.filter(ad_label__id__in = adlabels).values_list('ads', flat = True)
if Ads.objects.filter(id__in = ad_id).exists():
a = []
for ad in Ads.objects.filter(id__in = ad_id):
a.append(AdsDetailSongScheduler(ad).data)
return a
else:
return None
class AdsDetailSongScheduler(serializers.ModelSerializer):
no_of_times_per_hr = serializers.SerializerMethodField()
after_n_songs = serializers.SerializerMethodField()
specific_time = serializers.SerializerMethodField()
class Meta:
model = Ads
fields = ('id','no_of_times_per_hr')
def get_no_of_times_per_hr(self, obj):
if obj.no_of_times_per_hr:
return obj.no_of_times_per_hr
else:
return None
但是,我希望得到以下答复:
{
"id": 716,
"name": "XYZ",
"start_date": "2019-12-24",
"end_date": "2020-01-31",
"ads": [
{
"id": 20228,
"no_of_times_per_hr": 1,
},
]
},
{
"id": 716,
"name": "XYZ",
"start_date": "2019-12-24",
"end_date": "2020-01-31",
"ads": [
{
"id": 20227,
"no_of_times_per_hr": 2
},
]
},
{
"id": 716,
"name": "XYZ",
"start_date": "2019-12-24",
"end_date": "2020-01-31",
"ads": [
{
"id": 20229,
"no_of_times_per_hr": 7
}
]
},
我想解释一下,广告是以列表形式出现在单个响应中的。我想用相同的名称、start_date、end_date 值打破广告。有可能吗?
更新 1:
之后,我得到的回复之一,
[
{
"end_date": "2020-01-31",
"id": 76,
"ads": [
{
"id": 208,
"no_of_times_per_hr": 1
}
],
"name": "XYZ",
"start_date": "2019-12-24"
},
{
"end_date": "2020-01-31",
"id": 76,
"ads": [
{
"id": 207,
"no_of_times_per_hr": 2
}
],
"name": "XYZ",
"start_date": "2019-12-24"
},
{
"end_date": "2020-01-31",
"id": 76,
"ads": [
{
"id": 209,
"no_of_times_per_hr": 7
}
],
"name": "XYZ",
"start_date": "2019-12-24"
}
],
上面的响应算作一个 JSON 响应而不是三个,因为响应是一个列表,而不是三个不同的列表。那么,是否有人可以帮忙?
【问题讨论】:
标签: python django python-2.7 serialization