priya vyas
priya vyas

Reputation: 195

Storing multiple values in django model though serializer

I am fairly new to django rest framework. I have these tables in my database:

1) MainCategroies - which stores a list of all education fields.

2) College - which stores list of all college of my state.

3) CollegeCategoryLink - which stores the link between colleges and the categories to which they belong( here same college can fall under multiple categories). created a model with two foreign-key column

4) Users - the users of my app.

5) UserCategoryLink - link between the users and their selected categories. created a model with two foreign-key column

6) UserCollegeLink - link between the users and their selected colleges. created a model with two foreign-key column

Now the users will select their preferable categories from the list and that will be stored in my database and then i will return the related colleges back. All the data will come in json format from my ionic app.

i have written serializers for each model and created viewsets for CRUD operations. Now i am confused, how to store the data through viewset methods? I am currently doing this:

class UserCategoryLinkViewset(viewsets.ViewSet):
    serializer_class = UserCategoryLinkSerializer

    def create(self, request):
      selectedCats = []
      collegeList = []
      data = JSONParser().parse(request)
      for field in data:
         selectedCats.append(field['cat'])
         ucl = UserCategoryLink()
         ucl.user = collegeAppUser.objects.get(id=field['user'])
         ucl.cat = MainCategories.objects.get(id=field['cat'])
         if not UserCategoryLink.objects.filter(user=field['user'], cat=field['cat']).exists():
            ucl.save()

      for cats in selectedCats:
         queryset = CollegeCategoryLink.objects.filter(category_id=cats)
         serializer = CollegeCategoryLinkSerializer(queryset, many=True)
         for clg in serializer.data:
            queryset_college = College.objects.filter(id=clg['college_id'])
            serializer_college = CollegeSerializer(queryset_college, many=True)
            collegeList.append(serializer_college.data)

    return JSONResponse(collegeList)

And here are my serializers:

from rest_framework import serializers
from manageApp.models import collegeAppUser,MainCategories,UserCategoryLink, CollegeCategoryLink, College, UserCollegeLink

class collegeAppUserSerializer(serializers.ModelSerializer):
    class Meta:
        model = collegeAppUser
        fields = ('id', 'username', 'password')

class MainCategorySerializer(serializers.ModelSerializer):
    class Meta:
        model = MainCategories
        fields = ('id', 'category_name')

class UserCategoryLinkSerializer(serializers.ModelSerializer):
    class Meta:
        model = UserCategoryLink
        fields = ('id', 'user', 'cat')

class CollegeCategoryLinkSerializer(serializers.ModelSerializer):
    class Meta:
        model = CollegeCategoryLink
        fields = ('id', 'college_id', 'category_id')

class CollegeSerializer(serializers.ModelSerializer):
    class Meta:
        model = College
        fields = ('id', 'college_name', 'college_url')

class UserCollegeLinkSerializer(serializers.ModelSerializer):
    class Meta:
        model = UserCollegeLink
        fields = ('id', 'user', 'college')

But this is not the correct way to accomplish what i need to do as i am directly setting the data in my model and saving it, no use of serializer in here. I want to store the data through serializer rather then directly using my model.

Upvotes: 1

Views: 1447

Answers (0)

Related Questions