Django DRF-序列化多个模型
请帮忙!我怎样才能得到这个JSONDjango DRF-序列化多个模型,django,python-3.x,serialization,django-rest-framework,nested,Django,Python 3.x,Serialization,Django Rest Framework,Nested,请帮忙!我怎样才能得到这个JSON { "value": 9998, "startDate": "01-03-2019T06:59", "endDate": "31-03-2019T23:59", "days": 11111111, "name": "Juices", "Stores": [ 921, 923 ] } [ { "AS400Promotion": 9998, "days
{
"value": 9998,
"startDate": "01-03-2019T06:59",
"endDate": "31-03-2019T23:59",
"days": 11111111,
"name": "Juices",
"Stores": [
921,
923
]
}
[
{
"AS400Promotion": 9998,
"days": 11111111,
"name": "Prueba",
"promotionType": 999
}
]
因为,在我的代码中,我只检索这个JSON
{
"value": 9998,
"startDate": "01-03-2019T06:59",
"endDate": "31-03-2019T23:59",
"days": 11111111,
"name": "Juices",
"Stores": [
921,
923
]
}
[
{
"AS400Promotion": 9998,
"days": 11111111,
"name": "Prueba",
"promotionType": 999
}
]
我怎么做?我读了drf文档,但它不起作用,我做错了什么?
这是我的密码
我的模特
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')
my viewsets.py
class CampaignViewSet(viewsets.ModelViewSet):
queryset = Campaign.objects.all()
serializer_class = CampaignSerializer
还有我的路线
router.register(r'campaign', CampaignViewSet)
因此,关于第一个关于在json中更改字段名的查询,请看一看值示例,您可以用同样的方式更改其他字段名 要序列化外键,请在序列化程序中创建对象存储。这里有一个很好的例子 我无法在您的模型中看到开始日期和结束日期,因此我无法对此发表评论
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')
因此,关于第一个关于在json中更改字段名的查询,请看一看值示例,您可以用同样的方式更改其他字段名 要序列化外键,请在序列化程序中创建对象存储。这里有一个很好的例子 我无法在您的模型中看到开始日期和结束日期,因此我无法对此发表评论
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')
这里的问题不是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)字段的名称应与外键(在您的案例中为campaign字段)的模型(在您的案例中为Store model)中的相关名称相匹配。这里的问题不在于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)字段的名称应与外键(案例中为campaign字段)的模型(案例中为Store model)中的相关名称相匹配