更新具有m2m字段的模型实例

时间:2018-03-13 13:14:00

标签: python django many-to-many

我想使用.update(**kwargs)为非实际字段更新我的模型实例,并使用.clear()后跟.add()更新相关字段。我的问题是,他们中只有一人一次被处决。

当我执行以下操作并更新m2m字段时:

def preview(request):
    worksheet_object = WorkSheet.objects.get(pk=int(wsheet_id))
    worksheet_object.question.clear()
    worksheet_object.question.add(*question_pk_list)
    #other m2m fields

但我想更新非相关字段,当我执行以下操作时它不起作用:

def preview(request):
    worksheet_object = WorkSheet.objects.get(pk=int(wsheet_id)).update(
                                        classroom=worksheet_data['classroom'],
                                        category=worksheet_data['category'], 
                                        #other fields)
    worksheet_object.question.clear()
    worksheet_object.question.add(*question_pk_list)
    #other m2m fields

我正在使用this回答和this回答来做同样的事情。

任何人都可以帮助弄清楚我做错了什么吗?以及如何纠正?

1 个答案:

答案 0 :(得分:0)

以下声明中存在一些问题

WorkSheet.objects.get(pk=int(wsheet_id)).update(
                                    classroom=worksheet_data['classroom'],
                                    category=worksheet_data['category'], 
                                    #other fields)
  • update方法可用于查询集而不适用于模型实例。您首先使用get返回模型实例。
  • 对于queryset,update方法返回更新的行数而不是对象但需要更新m2m字段的对象。

要解决您的问题,您可以先获取该对象并保存。之后,您可以更新m2m字段。

def preview(request):
    worksheet_object = WorkSheet.objects.get(pk=int(wsheet_id))
    worksheet_object.classroom=worksheet_data['classroom']
    worksheet_object.category=worksheet_data['category']
    # other fields
    worksheet_object.save()

    worksheet_object.question.clear()
    worksheet_object.question.add(*question_pk_list)