python - How to add data to ManyToMany field using Django Rest Framework? -


i'm relatively new django , looking add data many-to-many field using serializers rest framework.

my model:

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) 

now, want add data userprofile model using rest api.

i've looked around, couldn't find anywhere.

so far i've achieved:

serializer:

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

when try using this, "al" empty.

view:

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) 

my post request this:

{"allergies": [{"name": ["beef"]},{"name": ["pork"]}]} 

i've been stuck on while, appreciated :)

couple of things can tried :

  1. it might possible database dont have of allergies coming in user data. thats why al coming empty.
  2. saving user data before add allergies it. important.
  3. by using ipdb or pdb, try understand in data form 'allergy' , 'allergies_data' coming out. if indeed have written, there no reason following code shouldnt work.

def create(self, validated_data):     allergies_data =validated_data.pop('allergies')     user1=userprofile.objects.create(**validated_data)     user1.save()     allergy in allergies_data:         al=ingfamily.objects.get_or_create(name=allergy['name'])         user1.allergies.add(al)     return user1 

Comments

Popular posts from this blog

node.js - Using Node without global install -

How to access a php class file from PHPFox framework into javascript code written in simple HTML file? -

java - Null response to php query in android, even though php works properly -