Abh*_*hek 2 django rest 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)
Run Code Online (Sandbox Code Playgroud)
理想的json发布请求看起来像这样
{
email:"abhishek@gmail.com"
preference : [ 'books', 'food', 'lifestyle', 'travel']
}
Run Code Online (Sandbox Code Playgroud)
我希望将此json模式保存到UserPreference模型中。这需要多次插入才能获得优先选择。有什么好的串行器设计呢?
我试过了
class UserPreferenceSerializer(serializers.ModelSerializer):
class Meta:
model = UserPreference
fields = ('email_id', 'preference')
Run Code Online (Sandbox Code Playgroud)
你可以让你的模型是这样的:
class UserPreference(models.Model)
email_id = models.ForeignKey('User')
preference = models.ManyToManyField('Preference') #create model for preferences
Run Code Online (Sandbox Code Playgroud)
然后将自定义创建方法添加到您的序列化程序:
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
Run Code Online (Sandbox Code Playgroud)
小智 5
您可以使用StringRelatedFieldDjango Rest Framework。
进行以下更改,您将以所需的方式获得响应。
models.py(在其中放入related_name)
class UserPreference(models.Model):
email_id = models.ForeignKey(User, related_name='preference')
preference = models.CharField(maxlength=20)
Run Code Online (Sandbox Code Playgroud)
serializers.py
class UserSerializer(serializers.ModelSerializer):
preference = serializers.StringRelatedField(many=True)
class Meta:
model = User
fields = ('email_id', 'preference')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5098 次 |
| 最近记录: |