混淆使用 get queryset 和使用 pass 忽略异常并在我的 django 视图中继续
Confuse for using get queryset and using pass to ignore an exception and proceed in my django view
我写了一个视图来更新我的草稿对象,在更新我的草稿之前我需要查看数据库中是否存在 package(draft.package) 的草稿。
如果有可用的草稿,我需要更新该草稿的字段。
我正在使用 get
查询集查看数据库以检查草稿可用性。
我想知道在这里使用 get
queryset 是不是好方法并将 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()
额外信息:
models.py
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.
是的,对于您的模型和方法签名,您使用 get
是正确的。为了简化事情,您可以通过直接将 document_list
分配给 M2M 关系来摆脱 delete()
/add()
方法。
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()
我写了一个视图来更新我的草稿对象,在更新我的草稿之前我需要查看数据库中是否存在 package(draft.package) 的草稿。
如果有可用的草稿,我需要更新该草稿的字段。
我正在使用 get
查询集查看数据库以检查草稿可用性。
我想知道在这里使用 get
queryset 是不是好方法并将 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()
额外信息:
models.py
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.
是的,对于您的模型和方法签名,您使用 get
是正确的。为了简化事情,您可以通过直接将 document_list
分配给 M2M 关系来摆脱 delete()
/add()
方法。
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()