CreateView + get_absolute_url - PullRequest
       8

CreateView + get_absolute_url

0 голосов
/ 12 февраля 2019

Я пытаюсь использовать CreateView, вот какая-то проблема, и я ее укладываю.

enter code here

Прежде всего, я пытаюсь создать пост и динамически заполнять поле пользователя, который создает пост.Это сохраняет сообщение, но не сохраняет пользователя:

Изображение от администратора

enter image description here

#views.py

    class PostCreateView(CreateView):
        model = Post
        template_name = 'blog/post_create.html'
        fields = ('title', 'slug', 'body',)

        def form_valid(self, form):
            form.instance.blog__user = self.request.user
            return super(PostCreateView,self).form_valid(form)

#models.py

Второй, ядумаю, что основная проблема, я не использую get_absolute_url правильно, и я получаю эту проблему:

Нет URL для перенаправления на.

enter image description here

Но это хорошо работает для post_detail.

     class Blog(models.Model):
        user = models.OneToOneField(User, on_delete=models.CASCADE)
        slug = models.SlugField(max_length=50)


        def __str__(self):
            return self.user.username

def create_blog(sender, **kwargs):
    if kwargs['created']:
        user_blog = Blog.objects.create(user=kwargs['instance'], slug=kwargs['instance'])

post_save.connect(create_blog, sender=User)

class Post(models.Model):
    blog = models.ForeignKey(Blog, on_delete=models.CASCADE)
    slug = models.SlugField(max_length=50, db_index=True)
    title = models.CharField(max_length=120, db_index=True)
    body = models.TextField(blank=True, db_index=True)
    pub_date = models.DateTimeField(auto_now_add=True)

    def get_absolute_url(self):
        return reverse('post_detail_url', kwargs={'slug': self.slug,
                                                'username': self.blog})

#urls.py

urlpatterns = [
    path('<username>/create/', PostCreateView.as_view(), name='post_create'),
    path('<username>/<str:slug>/', PostDetailView.as_view(), name='post_detail_url'),
    path('<username>/', PostListView.as_view(), name='post_list_url'),
    path('<username>/<str:slug>/update/', PostUpdateView.as_view(), name='post_update'),

]

Я пытаюсь определить get_success_url, и я получаю это: NoReverseMatch

enter image description here

Пожалуйста, помогите Я действительно потерян воблака!

1 Ответ

0 голосов
/ 12 февраля 2019

Попробуйте код ниже

class PostCreateView(CreateView):
        model = Post
        template_name = 'blog/post_create.html'
        fields = ('title', 'slug', 'body', 'blog')


        def get_success_url(self):
            return self.post_instance.get_absolute_url()

        def form_valid(self, form):
            form.instance.blog.user = self.request.user
            self.post_instance = form.instance
            return super(PostCreateView,self).form_valid(form)
...