首页 > 解决方案 > 如何从 Subjects 模型中获取对象的 id?

问题描述

我想在主题模型中为该特定对象关联一个帖子,但我无法弄清楚(views.py 中的错误)。对于像我这样的初学者,感谢您的帮助。

模型.py

class Subjects(models.Model):
    title = models.CharField(max_length=200)
    slug = AutoSlugField(populate_from=['title'], max_length=250, unique=True)
    author = models.ForeignKey(User, on_delete=models.CASCADE)

    def __str__(self):
        return f"{self.title}"

    @property
    def posts(self):
        return Post.objects.filter(subject=self)


class Post(models.Model):
    subject = models.ForeignKey(
        Subjects, on_delete=models.CASCADE, related_name='subject_model')
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    body = RichTextField(blank=True, null=True)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)

视图.py

class PostCreateView(LoginRequiredMixin, CreateView):
template_name = 'post/post_create.html'
model = Post
fields = ['body']
success_url = '/'

def form_valid(self, form):
    form.instance.author = self.request.user
    form.instance.subject_id = self.kwargs['id'] # error here
    form.save()
    return super(PostCreateView, self).form_valid(form)

网址.py

urlpatterns = [
    path('', views.CourseList.as_view(), name='course_list'),
    path('create_subject', views.SubjectCreateView.as_view(), name='create_subject'),

    # register
    path('register/', views.register, name='register'),

    # detailview
    path('<int:id>/', views.SubjectDetailView.as_view(), name='subject-detail'),

    # post create view
    path('post/new/',
         views.PostCreateView.as_view(), name='post-create')
]

错误

/post/new/ 'id' 处的 KeyError

标签: pythondjangodjango-viewsdjango-urls

解决方案


推荐阅读