3

我對DJango比較陌生,我正在尋找使用來自其他框架的序列化程序將數據添加到多對多字段中。如何使用Django Rest Framework將數據添加到ManyToMany字段?

我的模型:

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) 

現在,我想將數據添加到使用REST API的用戶配置模式。

我環顧四周,但找不到任何地方。

到目前爲止,我所取得的成績:

串行:

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 

當我嘗試使用這個 「人」 是空的。

觀點:

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) 

class UserDetail(generics.RetrieveDestroyAPIView): 
    serializer_class = UserProfileSerializer 
    permission_classes = (permissions.IsAuthenticated,) 

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

我發佈採購會看這樣的:

{"allergies": [{"name": ["Beef"]},{"name": ["Pork"]}]} 

我一直停留在這一段時間,任何幫助,將不勝感激:)

+0

嘗試以下方法: 在UserProfileSerializer創建方法,在for循環之前,明確地保存USER1 - > user1.save() – Jaakko

回答

0

夫婦的東西可以嘗試:

  1. 我t可能有可能你的數據庫沒有一些過敏用戶數據。這就是爲什麼你的人空了。
  2. 保存用戶數據,然後添加過敏。這個很重要。
  3. 通過使用ipdb或pdb,試着瞭解什麼樣的數據表格'allergy'和'allergies_data'出來了。如果確實是你寫的,那麼下面的代碼不應該工作。

def create(self, validated_data): 
    allergies_data =validated_data.pop('allergies') 
    user1=UserProfile.objects.create(**validated_data) 
    user1.save() 
    for allergy in allergies_data: 
     al=IngFamily.objects.get_or_create(name=allergy['name']) 
     user1.allergies.add(al) 
    return user1 
相關問題