小编Rij*_*ohn的帖子

如何使用Django Rest Framework将数据添加到ManyToMany字段?

我是DJango的新手,我希望使用rest框架中的序列化器将数据添加到多对多字段中。

我的模特:

class IngFamily(models.Model):
 name=models.CharField(max_length=30, unique=True, verbose_name='ingredient parent')

class UserProfile(models.Model):
      user=models.ForeignKey(User)
      allergies=models.ManyToManyField(IngFamily, verbose_name='allergies', null=True)
Run Code Online (Sandbox Code Playgroud)

现在,我想使用其余的api将数据添加到UserProfile模型。

我环顾四周,但找不到任何地方。

到目前为止,我已经实现了:

序列化器:

class IngFlySerializer(serializers.ModelSerializer):

  class Meta:
    model = IngFamily
    fields= ('name',)


class UserProfileSerializer(serializers.ModelSerializer):
  allergies=IngFlySerializer(many=True,)
  class Meta:
        model = UserProfile
        fields=('allergies',)

  def create(self, validated_data):

    allergies_data =validated_data.pop('allergies', [])

    #import pdb;pdb.set_trace()
    user1=UserProfile.objects.create(**validated_data)
    for allergy in allergies_data:

      al=IngFamily.objects.filter(name=allergy.get('name'))
      #al.name=allergy.get('name')
      user1.allergies.add(al)

    user1.save()
    return user1
Run Code Online (Sandbox Code Playgroud)

当我尝试使用它时,“ al”为空。

视图:

class user_profile(generics.ListCreateAPIView):


  serializer_class = UserProfileSerializer
  permission_classes = (permissions.IsAuthenticated,)

  def get_queryset(self):
        user = self.request.user
        return UserProfile.objects.filter(user=user)

  def perform_create(self, serializer):
      #import pdb; pdb.set_trace()
      serializer.save(user=self.request.user) …
Run Code Online (Sandbox Code Playgroud)

python django serializer manytomanyfield django-rest-framework

6
推荐指数
1
解决办法
2237
查看次数