Python 使用相同的TemplateView进行创建和更新
我有一个模板视图:Python 使用相同的TemplateView进行创建和更新,python,django,Python,Django,我有一个模板视图: class DamageEntry(TemplateView): template_name = "damage/damageadd.html" def get(self, request): general = General.objects.get(pk=1) form = DamageEntryForm() args = {'form': form, '
class DamageEntry(TemplateView):
template_name = "damage/damageadd.html"
def get(self, request):
general = General.objects.get(pk=1)
form = DamageEntryForm()
args = {'form': form,
'general': general,
}
return render(request, self.template_name, args)
def post(self, request):
general = General.objects.get(pk=1)
form = DamageEntryForm(request.POST)
form.non_field_errors()
if form.is_valid():
post = form.save(commit=False)
if self.request.user.is_authenticated():
post.user = request.user
post.userip = get_client_ip(request) # το IP του χρήστη
location = get_cocation(post.lat, post.lng)
post.location = location
post.formatted_address= location.formatted_address
post.entry_date = datetime.datetime.now(tz=timezone.utc)
post.save()
form = DamageEntryForm()
args = {'form': form,
'general': general
}
return http.HttpResponseRedirect('damage/add/')
else:
print('form is not valid')
print(form.errors)
# form = DamageEntryForm()
args = {'form': form,
'general': general
}
return render(request, self.template_name, args)
它可以很好地创建新记录。
我想使用相同的视图进行更新,因为Post部分有额外的代码
我使用此URL进行更新:
# /damage/damage/list/1
url(r'damage/list/(?P<pk>[0-9]+)/$', views.DamageEntry.as_view(), name="damage-by-id"),
#/damage/damage/list/1
url(r'damage/list/(?P[0-9]+)/$),views.DamageEntry.as_view(),name=“按id损坏”),
我能做这个吗?我如何通过pk来创建和更新记录?当您尝试发布数据时会发生什么?我的想法是:您可以这样做,但您需要使用模型表单而不是普通表单,这样您可以在创建formI时传递模型的实例。我不认为您可以在一个视图中完成您尝试执行的操作,至少不能使用pk作为参考。我觉得鼻涕虫更适合你的需要。然后可以搜索slug,如果没有找到,可以创建对象。然而,这意味着每次你在搜索段塞时输入一个错误,它就会创建并将该错误添加到数据库中。我会在你的情况下提出两个观点(通过pk查询)。发布效果很好。但是我有额外的userip、latitude等代码。我想在更新中运行相同的代码。我不懂slug方法,我是django的新手。你能给我一个链接看看吗?Thanks我使用ModelForm作为表单。如何解决模型表单的问题?