我想使用.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
任何人都可以帮助弄清楚我做错了什么吗?以及如何纠正?
答案 0 :(得分:0)
以下声明中存在一些问题
WorkSheet.objects.get(pk=int(wsheet_id)).update(
classroom=worksheet_data['classroom'],
category=worksheet_data['category'],
#other fields)
update
方法可用于查询集而不适用于模型实例。您首先使用get
返回模型实例。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)