【问题标题】:How to take input of ManyToManyField of django?如何获取 django 的 ManyToManyField 的输入?
【发布时间】:2021-09-30 06:23:43
【问题描述】:

我有 2 个模型 - 房间和模块。一个模块可以包含许多房间,一个房间可以包含许多不同的模块。以下是模型-

房间模型 -

class Rooms(models.Model):
    room_id = models.AutoField(primary_key=True)
    title = models.CharField(max_length=100)
    desc = models.TextField()
    level = models.CharField(max_length=100)

模块模型-

class Module(models.Model):
    module_id = models.AutoField(primary_key=True)
    title = models.CharField(max_length=100)
    desc = models.TextField()
    is_deleted = models.BooleanField(default=False)
    rooms = models.ManyToManyField(Rooms)

模块序列化器 -

class ModuleSerializer(serializers.ModelSerializer):
    rooms = RoomSerializer(read_only=True, many=True)
    class Meta:
        model = Module
        fields = "__all__"

模块 view.py 文件 -

class add_module(APIView):
    def post(self, request, format=None):
            module_serializer = ModuleSerializer(data=request.data)
            if module_serializer.is_valid():
                module_serializer.save()
                return Response(module_serializer.data['module_id'], status = status.HTTP_201_CREATED)
            return Response("response":module_serializer.errors, status = status.HTTP_400_BAD_REQUEST)

如何在创建模块对象时将多个房间作为 views.py 文件的输入。另外,如果我想在邮递员中测试我的 API,那么如何在邮递员中接受多个输入。

【问题讨论】:

标签: django django-models django-rest-framework django-views manytomanyfield


【解决方案1】:

你可以使用类似的结构:

class ModuleSerializer(serializers.ModelSerializer):
   rooms = RoomSerializer(read_only=True, many=True)


   class Meta:
       model = Module
       fields = "__all__"


   def create(self, validated_data):
       rooms = validated_data.pop('rooms')
       ...
       for room in rooms:
           ...
       return Response(...)

【讨论】:

  • 您能告诉我如何将 ManyToMany 字段的 .add() 方法与 module_serializer 对象一起使用。因为,根据文档,它只能与模型对象一起使用。
猜你喜欢
  • 1970-01-01
  • 2021-10-30
  • 1970-01-01
  • 1970-01-01
  • 2021-07-22
  • 2016-08-03
  • 2019-06-10
  • 2021-04-04
  • 2019-05-24
相关资源
最近更新 更多