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"]}]}
我一直停留在這一段時間,任何幫助,將不勝感激:)
嘗試以下方法: 在UserProfileSerializer創建方法,在for循環之前,明確地保存USER1 - > user1.save() – Jaakko