Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用相同的TemplateView进行创建和更新_Python_Django - Fatal编程技术网

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作为表单。如何解决模型表单的问题?