Django Получение PK из Createview - PullRequest
1 голос
/ 25 мая 2020

Я создаю сообщение в блоге с определенным первичным ключом c (pk). Другая моя функция требует, чтобы на входе был pk (пожалуйста, проверьте views.py). Я пытаюсь получить идентификатор сообщения, получая его как идентификатор объекта, хотя он указывает, что объект не имеет атрибута 'id'.

Есть идеи, как получить pk в качестве переменной?

Спасибо, Тед

#The template
{% extends "Blog/base.html" %}
{% load crispy_forms_tags %}
{% block content%}
    <div class="content-section">
        <form method = "POST">
            {% csrf_token %}
            <fieldset class="form-group">
                <legend class="border-bottom mb-4"> Blog Post </legend>
                {{ form|crispy }}
            </fieldset>
            <div class="form-group">
                <button class="btn btn-outline-info" type="submit">Post</button>
            </div>
        </form>
    </div>

{% endblock content%}
#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'

1 Ответ

1 голос
/ 25 мая 2020

Вы можете получить объект через экземпляр, завернутый в форму. Но пока объект не сохранен, у него нет первичного ключа.

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<b>.instance.pk</b>
        self.external(pk)
        return response
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...