请帮忙!我怎样才能获得这个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
和我的routes.py
router.register(r'campaign', CampaignViewSet)
这里的问题不在于DRF,您需要了解数据库关系的工作方式。我假设您有多对一关系(一个广告系列多个商店),因此外键需要在商店模型中,而不是像这样的广告系列模型
class Store(models.Model):
campaign = models.ForeignKey(Campaign, related_name='stores', on_delete=models.CASCADE)
然后使用嵌套的序列化器,就像你已经完成的那样
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')
始终牢记嵌套序列化程序(在您的情况下为StoreSerializer)字段的名称应与模型中的related_name(在您的案例中为Store模型)匹配,以用于外键(在您的案例中为广告系列字段)
因此,关于您在json中更改字段名称的第一个查询,请查看值示例,您可以以相同的方式更改其他人。
要获取序列化外键,请在CampaignSerializer中创建对象库。一个很好的例子就是Django Rest Framework writable nested serializers
我在模型中看不到start_date和end_date所以我无法对此发表评论
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')