Python Django从Createview获取PK

Python Django从Createview获取PK,python,django,python-3.x,Python,Django,Python 3.x,我正在创建一篇带有特定主键(pk)的博客文章。我的另一个函数需要将pk作为输入(请检查views.py)。我试图通过将post id作为对象id来获取它,尽管它表明该对象没有属性“id” 有没有办法把pk作为一个变量 谢谢, 特德 您可以通过包装在表单中的实例获取对象。但只要对象未保存,它就没有主键 class PostCreateView(LoginRequiredMixin, CreateView): model = Post fields = ['first_name',

我正在创建一篇带有特定主键(pk)的博客文章。我的另一个函数需要将pk作为输入(请检查views.py)。我试图通过将post id作为对象id来获取它,尽管它表明该对象没有属性“id”

有没有办法把pk作为一个变量

谢谢, 特德


您可以通过包装在表单中的实例获取对象。但只要对象未保存,它就没有主键

class PostCreateView(LoginRequiredMixin, CreateView):
    model = Post
    fields = ['first_name', 'last_name', 'titles' ,'title', 'content', 'billing']

    def form_valid(self, form):
        form.instance.author = self.request.user
        response = super().form_valid(form)
        pk = form.instance.pk
        self.external(pk)
        return response
类后创建视图(LoginRequiredMixin,CreateView):
型号=员额
字段=[“名字”、“姓氏”、“标题”、“标题”、“内容”、“账单”]
def表单_有效(自身、表单):
form.instance.author=self.request.user
response=super().form\u有效(form)
pk=form.instance.pk
自身外部(pk)

返回响应
Hi Willem,我收到以下错误:
AttributeError at/post/new'PostCreateView'对象没有属性'instance'
,但是您的
表单
不是
PostCreateView
,它应该是您的模型。你确定你没有使用
self.instance
?你是对的,我使用的是
self.instance.pk
而不是
pk=form.instance.pk
。虽然我仍然没有得到我所期望的。
pk=form.instance.pk
的输出是
None
@tatask:但在执行
super()之前或之后。form\u有效(form)
。正如我在回答中所写的,只要表单没有保存(在
super().form\u valid(form)
中发生),对象就没有主键。
#urls.py
from django.urls import path
from .views import PostListView, PostDetailView, PostCreateView, PostUpdateView, PostDeleteView
from . import views

urlpatterns = [

    path('post/<int:pk>/', PostDetailView.as_view(), name='post-detail'),
    path('post/new', PostCreateView.as_view(), name='post-create'),
]

#views.py

from django.shortcuts import render
from django.views.generic import (
    ListView,
    DetailView,
    CreateView,
    UpdateView,
    DeleteView
)
from .models import Post
from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin
from .latex import tex
from django.http import FileResponse, Http404
from django.urls import reverse

class PostCreateView(LoginRequiredMixin, CreateView):
    model = Post
    fields = ['first_name', 'last_name', 'titles' ,'title', 'content', 'billing']

    def form_valid(self, form):
        form.instance.author = self.request.user # Use this to get the information from the form.

        pk = self.object.id

        self.external(pk)

        return super().form_valid(form), 

#Error which I am getting
'NoneType' object has no attribute 'id'
class PostCreateView(LoginRequiredMixin, CreateView):
    model = Post
    fields = ['first_name', 'last_name', 'titles' ,'title', 'content', 'billing']

    def form_valid(self, form):
        form.instance.author = self.request.user
        response = super().form_valid(form)
        pk = form.instance.pk
        self.external(pk)
        return response