我写了一个视图来更新我的草稿对象,在更新草稿之前我需要查看db中是否存在包(draft.package)的草稿。
如果有任何草案,我需要更新该草案的字段。
我正在使用get
queryset来查看db以检查草稿的可用性
我想知道在get
使用pass
查询集是不错的方法,并将except
用于def save_draft(draft, document_list):
"""
"""
try:
draft = Draft.objects.get(package=draft.package)
except Draft.DoesNotExist as exc:
pass
except Draft.MultipleObjectsReturned as exc:
raise CustomException
else:
draft.draft_document_list.filter().delete()
draft.draft_document_list.add(*document_list)
draft.save()
。
class Package(models.Model):
name = models.CharField(max_length=100)
# -- fields
class Document(models.Model):
# -- fields
Class Draft(models.Model):
# --- fields
package = models.ForeignKey(Package)
draft_document_list = models.ManyToManyField(Document)
# first check to see if draft exists for package
# if exists
# overwrite draft_document_list with existed draft and save
# if none exists
# update passed draft object with draft_document_list
save_draft(draft, document_list)
draft --> latest draft object
document_list --> list of documents mapped with Draft as M2M.
{{1}}
答案 0 :(得分:1)
是的,对于您的模型和方法签名,您可以使用get
权限。为了简化操作,您可以通过直接将delete()
分配给M2M关系来摆脱add()
/ document_list
方法。
def save_draft(draft, document_list):
try:
draft = Draft.objects.get(package=draft.package)
except Draft.DoesNotExist:
pass
except Draft.MultipleObjectsReturned:
raise CustomException
draft.draft_document_list = document_list
draft.save()
编辑:如果每个包只能有一个草稿,那么为什么要使用ForeignKey(Package)
?使用OneToOne
关系,您的代码将更加简单:
def save_draft(draft, document_list):
draft.draft_document_list = document_list
draft.save()