请帮助!我如何获取此JSON
{
"value": 9998,
"startDate": "01-03-2019T06:59",
"endDate": "31-03-2019T23:59",
"days": 11111111,
"name": "Juices",
"Stores": [
921,
923
]
}
因为,使用我的代码,我只检索了此JSON
[
{
"AS400Promotion": 9998,
"days": 11111111,
"name": "Prueba",
"promotionType": 999
}
]
我该怎么办?我阅读了drf文档,但没有用,我在做什么错? 这是我的代码 我的models.py
class Store(models.Model):
modular = models.ForeignKey(Modular, on_delete=models.CASCADE)
store_nbr = models.IntegerField(primary_key=True, help_text="Numero
Tienda")
name = models.CharField(max_length=255, help_text="Nombre de sucursal")
def __str__(self):
return self.name
class Campain(models.Model):
AS400Promotion = models.IntegerField(default=9998)
days = models.IntegerField(default=1111111)
name = models.CharField(max_length=50)
store = models.ForeignKey(Store, related_name='stores', on_delete=models.CASCADE)
promotionType = models.IntegerField(default=99)
这是我的serializer.py
class StoreSerializer(serializers.ModelSerializer):
class Meta:
model = Store
fields = ('modular', 'store_nbr', 'name', 'address', 'commune',
'region', 'open_status', 'manager_name')
class CampaignSerializer(serializers.ModelSerializer):
stores = StoreSerializer(many=True, read_only=True)
class Meta:
model = Campaign
fields = ('value1', 'days', 'name', 'stores', 'promotionType')
我的viewsets.py
class CampaignViewSet(viewsets.ModelViewSet):
queryset = Campaign.objects.all()
serializer_class = CampaignSerializer
和我的路线。py
router.register(r'campaign', CampaignViewSet)
答案 0 :(得分:1)
这里的问题不是DRF,您需要重新研究数据库关系的工作方式。我假设您具有多对一关系(一个广告系列有很多商店),所以外键必须位于商店模型中,而不是广告系列模型中 像这样
/customers
然后像您已经完成的那样使用嵌套序列化器
class Store(models.Model):
campaign = models.ForeignKey(Campaign, related_name='stores', on_delete=models.CASCADE)
请始终记住,嵌套序列化程序(在您的情况下为StoreSerializer)的字段名称应与模型(在您的情况下为Store模型)的模型的related_name相匹配(在您的情况下为campaign字段)
答案 1 :(得分:0)
因此,对于第一个有关更改json中的字段名称的查询,请看一下值示例,您可以用相同的方式更改其他示例。
要使外键序列化,请在CampaignSerializer中创建一个对象 store 。一个很好的例子在这里 Django Rest Framework writable nested serializers
在您的模型中看不到开始日期和结束日期,所以我无法对此发表评论
class CampaignSerializer(serializers.ModelSerializer):
store = StoreSerializer(many=True, read_only=True)
value = serializers.IntegerField(source='AS400Promotion')
class Meta:
model = Campaign
fields = ('value', 'days', 'name', 'store', 'promotionType')