首页 文章

如何在Django Rest Framework中编写REST API中的数组数据串行器?

提问于
浏览
1

我在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')

2 回答

  • 4

    你可以像这样制作你的模型:

    class UserPreference(models.Model)
        email_id = models.ForeignKey('User')
        preference = models.ManyToManyField('Preference') #create model for preferences
    

    然后将自定义create方法添加到序列化程序:

    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
    
  • 4

    你可以使用Django Rest Framework的 StringRelatedField .

    进行以下更改,您将以您希望的方式获得响应 .

    models.py(把相关名称放在那里)

    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')
    

相关问题