2017-09-09 8 views
1

更新と作成操作に単一のビューを使用しようとしています。get_or_createを正しく使用していますか?

私は2つの異なるURL採用:その後、私は私のクラスとしてこれを使用

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が存在するかどうかの私のチェックは奇妙な/グロスのようです。

+0

あなたは三項演算子でそれを少し凝縮できたが、私はロジックか何かに問題が表示されません。 –

答えて

1

私はこのような何かをするだろう:

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を与えます。それがより明確にするために、あなたはこれを行うことができます。

self.kwargs.get('pk', None) 
関連する問題