尝试使用单个视图进行更新和创建操作。
我使用了两个不同的网址:
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)
我会做这样的事情:
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
中是否存在pk
。 kwargs
会在self.kwargs.get('pk')
为您提供,否则会给您pk
。为了使其更明确,您可以这样做:
None