混淆使用get queryset并使用pass忽略异常并继续在我的django视图中

时间:2015-01-15 09:13:36

标签: python django exception django-queryset

我写了一个视图来更新我的草稿对象,在更新草稿之前我需要查看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)

额外信息:

models.py

  # 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}}

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()