如何在 Django Rest Framework 中为 REST API 中的数组数据编写序列化程序?
How to write a Serializer for array data in REST API in Django Rest Framework?
我在 Django 中编写了基本模型序列化程序,其中 api 模仿数据模型。我现在需要将用户首选项存储在数据库中。 api 包含一个数组。
我的用户模型:
class User(models.Model):
email_id = models.EmailField(max_length=80, blank=True, primary_key=True)
class UserPreference(models.Model)
email_id = models.ForeignKey('User')
preference = models.CharField(maxlength=20)
一个理想的 json post 请求应该是这样的
{
email:"abhishek@gmail.com"
preference : [ 'books', 'food', 'lifestyle', 'travel']
}
我希望将此 json 架构保存到 UserPreference
模型。这需要多次插入以供选择。什么是好的序列化器设计?
我试过了
class UserPreferenceSerializer(serializers.ModelSerializer):
class Meta:
model = UserPreference
fields = ('email_id', 'preference')
您可以使用 Django Rest Framework 的 StringRelatedField
。
进行以下更改,您将获得所需的响应。
models.py(将 related_name 放在那里)
class UserPreference(models.Model):
email_id = models.ForeignKey(User, related_name='preference')
preference = models.CharField(maxlength=20)
serializers.py
class UserSerializer(serializers.ModelSerializer):
preference = serializers.StringRelatedField(many=True)
class Meta:
model = User
fields = ('email_id', 'preference')
你可以这样制作你的模型:
class UserPreference(models.Model)
email_id = models.ForeignKey('User')
preference = models.ManyToManyField('Preference') #create model for preferences
然后将自定义创建方法添加到您的序列化程序:
def create(self, validated_data):
user = self.context.get('user') #you can pass context={'user': self.request.user} in your view to the serializer
up = UserPreference.objects.create(email_id=user)
up.save()
preference = validated_data.get('preference', [])
up.preference.add(*preference)
up.save()
return up
我在 Django 中编写了基本模型序列化程序,其中 api 模仿数据模型。我现在需要将用户首选项存储在数据库中。 api 包含一个数组。
我的用户模型:
class User(models.Model):
email_id = models.EmailField(max_length=80, blank=True, primary_key=True)
class UserPreference(models.Model)
email_id = models.ForeignKey('User')
preference = models.CharField(maxlength=20)
一个理想的 json post 请求应该是这样的
{
email:"abhishek@gmail.com"
preference : [ 'books', 'food', 'lifestyle', 'travel']
}
我希望将此 json 架构保存到 UserPreference
模型。这需要多次插入以供选择。什么是好的序列化器设计?
我试过了
class UserPreferenceSerializer(serializers.ModelSerializer):
class Meta:
model = UserPreference
fields = ('email_id', 'preference')
您可以使用 Django Rest Framework 的 StringRelatedField
。
进行以下更改,您将获得所需的响应。
models.py(将 related_name 放在那里)
class UserPreference(models.Model):
email_id = models.ForeignKey(User, related_name='preference')
preference = models.CharField(maxlength=20)
serializers.py
class UserSerializer(serializers.ModelSerializer):
preference = serializers.StringRelatedField(many=True)
class Meta:
model = User
fields = ('email_id', 'preference')
你可以这样制作你的模型:
class UserPreference(models.Model)
email_id = models.ForeignKey('User')
preference = models.ManyToManyField('Preference') #create model for preferences
然后将自定义创建方法添加到您的序列化程序:
def create(self, validated_data):
user = self.context.get('user') #you can pass context={'user': self.request.user} in your view to the serializer
up = UserPreference.objects.create(email_id=user)
up.save()
preference = validated_data.get('preference', [])
up.preference.add(*preference)
up.save()
return up