我正确使用get_or_create吗?

时间:2017-09-09 05:20:41

标签: django

尝试使用单个视图进行更新和创建操作。

我使用了两个不同的网址:

url(r'^update/(?P<pk>[0-9]+)/$', BoardUpdateView.as_view(), name='board-update'),
url(r'^update/$', BoardUpdateView.as_view(), name='board-create'),

然后我用它作为我的班级:

class BoardUpdateView(UpdateView):
    model = Board
    fields = ['author']

    context_object_name = 'board'

    def get_object(self, queryset=None):
        if "pk" not in self.kwargs:
            self.kwargs['pk']=None
        obj, created = Board.objects.get_or_create(pk=self.kwargs['pk'],
             defaults={'author': self.request.user})

      return obj

我知道有很多方法可以使用Python,但我想知道这种方法是否会导致任何问题,或者是否有更惯用的方法来执行此操作?例如,我检查pk是否存在似乎很奇怪/粗略。

1 个答案:

答案 0 :(得分:1)

我会做这样的事情:

type: ClusterIP

这样,您无需检查def get_object(self, queryset=None): obj, created = Board.objects.get_or_create(pk=self.kwargs.get('pk'), defaults={'author': self.request.user}) return obj 中是否存在pkkwargs会在self.kwargs.get('pk')为您提供,否则会给您pk。为了使其更明确,您可以这样做:

None