创建由多对多字段组成的模型实例

Create model instance consisting of many-to-many field

我正在尝试使用 post 请求创建一个模型实例,但是我遇到的一个问题是该模型由一个多对多字段组成。现在我正处于一个阶段,我有一个由模型实例(模块)的主键组成的数组,我希望与我试图创建的模型(一个学生)相关联。

请查看下面我的代码,因为我不知道哪里出错了,经过一些基础研究后,我似乎需要使用 .set() 方法。

PUT['modules'] 对应于 array,由值 [1,2,3,5].

组成
def create_student(request):
    """API for creating a student"""
    if request.method == "POST":
        PUT = json.loads(request.body)
        student = Student(name=PUT['name'], join_date=PUT['join_date'], academic_year=PUT['academic_year'],
                          modules=PUT['modules'] # THIS IS WHERE I NEED HELP
                          )
        student.save()
        return JsonResponse(student.to_dict())

    return HttpResponseBadRequest("Invalid method")

感谢您的宝贵时间。

为了填充 ManyToManyField 关系,首先需要保存您想要 link 的两个项目。这是必要的,因为否则它们没有主键:一个 links 两个项目通过在 连接 table 中添加一条记录和两个主键link.

如果您因此想要 link 您正在构建的 Student 模块,您首先创建 student,然后您可以使用 student.modules.add(…) 到 link 通过解压缩模块的主键列表将其添加到(现有)模块:

def create_student(request):
    """API for creating a student"""
    if request.method == "POST":
        PUT = json.loads(request.body)
        student = Student.objects.create(
            name=PUT['name'], join_date=PUT['join_date'], academic_year=PUT['academic_year']
        )
        student<strong>.modules.add(*PUT['modules'])</strong>
        return JsonResponse(student.to_dict())
    else:
        # …