通过序列化程序在django模型中存储多个值

时间:2015-09-27 15:28:37

标签: django python-2.7 django-models django-rest-framework

我是django rest框架的新手。我在我的数据库中有这些表:

1) MainCategroies - 存储所有教育字段的列表。

2)大学 - 存储我所有州的大学名单。

3) CollegeCategoryLink - 存储大学与其所属类别之间的联系(此处同一所大学可归入多个类别)。 使用两个外键列

创建了一个模型

4)用户 - 我的应用的用户。

5) UserCategoryLink - 用户及其选定类别之间的链接。创建了一个包含两个外键列的模型

6) UserCollegeLink - 用户与所选院校之间的链接。创建了一个包含两个外键列的模型

  

现在,用户将从列表中选择他们的首选类别   并将存储在我的数据库中,然后我将返回   相关学院回来了。所有数据都将以我的json格式提供   离子应用。

我为每个模型编写了序列化程序,并为CRUD操作创建了视图集。现在我很困惑,如何通过viewset方法存储数据?我目前正在这样做:

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)

这是我的序列化器:

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

但这不是完成我需要做的正确方法,因为我直接在我的模型中设置数据并保存它,在这里没有使用序列化器。我希望通过序列化程序存储数据,而不是直接使用我的模型。

1 个答案:

答案 0 :(得分:1)

尝试关联模型。
您可以看到其余的框架文档:Relations

对于您的情况,您将使用嵌套关系! =]