【问题标题】:Storing multiple values in django model though serializer通过序列化程序在 django 模型中存储多个值
【发布时间】:2015-12-24 21:40:00
【问题描述】:

我对 django rest 框架相当陌生。我的数据库中有这些表:

1) MainCategroies - 存储所有教育领域的列表。

2) College - 存储我所在州所有大学的列表。

3) CollegeCategoryLink - 存储大学及其所属类别之间的链接(此处同一大学可以属于多个类别)。 创建了一个具有两个外键列的模型

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

5) UserCategoryLink - 用户与其所选类别之间的链接。 创建了一个具有两个外键列的模型

6) UserCollegeLink - 用户与其所选大学之间的链接。 创建了一个具有两个外键列的模型

现在用户将从列表中选择他们喜欢的类别 这将存储在我的数据库中,然后我将返回 相关院校回来。所有数据都将以 json 格式来自我的 离子应用程序。

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效
    • @werton 你能否更详细地解释一下这种嵌套关系将如何帮助我?
    猜你喜欢
    • 1970-01-01
    • 2019-01-16
    • 2018-06-11
    • 1970-01-01
    • 1970-01-01
    • 2020-11-18
    • 1970-01-01
    • 1970-01-01
    • 2018-09-12
    相关资源
    最近更新 更多