【问题标题】:Trying to add slug to end of get_absolute_url function in models (Django)试图在模型中将 slug 添加到 get_absolute_url 函数的末尾(Django)
【发布时间】:2021-02-22 18:49:23
【问题描述】:

我的 Post 模型中有一个函数,一个 get_absolute_url,它与“post-detail”相反,它的主键有 kwargs,我如何为 slug 添加另一个函数;在我的个人资料模型中。

目前我遇到错误: /post/26/tested123/update/ 处的 NoReverseMatch 未找到带有关键字参数“{'pk': 26}”的“post-detail”的反向。尝试了 1 种模式:['post/(?P[0-9]+)/(?P[-a-zA-Z0-9_]+)/$']

当我点击更新帖子页面上的更新按钮时出现此错误

饲料模型

feed/models.py

class Post(models.Model):
    description = models.TextField(max_length=255)
    pic = models.ImageField(upload_to='path/to/img', blank=True)
    date_posted = models.DateTimeField(default=timezone.now)
    user_name = models.ForeignKey(User, on_delete=models.CASCADE)
    tags = models.CharField(max_length=100, blank=True)

    def __str__(self): 
        return self.description

    def get_absolute_url(self):
        return reverse('post-detail', kwargs={'pk': self.pk})

个人资料模型 用户/模型.py

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    image = models.ImageField(default='default.png', upload_to='profile_pics')
    slug = AutoSlugField(populate_from='user')
    bio = models.CharField(max_length=255, blank=True)
    friends = models.ManyToManyField('Profile', blank=True)

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

    
    def get_absolute_url(self):
        return "/users/{}".format(self.slug)

views.py

@login_required
def post_detail(request, pk, slug):
    post = get_object_or_404(Post, pk=pk)
    user = request.user
    is_liked =  Like.objects.filter(user=user, post=post)
    if request.method == 'POST':
        form = NewCommentForm(request.POST)
        if form.is_valid():
            data = form.save(commit=False)
            data.post = post
            data.username = user
            data.save()
            return redirect('post-detail', pk=pk, slug=slug)
    else:
        form = NewCommentForm()
    return render(request, 'feed/post_detail.html', {'post':post, 'is_liked':is_liked, 'form':form})

views.py

class PostUpdateView(LoginRequiredMixin, UserPassesTestMixin, UpdateView):
    model = Post
    fields = ['description', 'pic', 'tags']
    template_name = 'feed/create_post.html'

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

    def test_func(self):
        post = self.get_object()
        if self.request.user == post.user_name:
            return True
        return False

【问题讨论】:

    标签: django django-models django-views


    【解决方案1】:

    您在Post 中的get_absolute_urlkwargs 中没有slug,或者我遗漏了什么? 'slug': self.user_name.profile.slug

    【讨论】:

    • 我认为问题可能出在 get_absolute_url 函数上,因为我已将 slug 作为视图中的参数,但我不确定。如何将配置文件模型中的 slug 放入 get_absolute 函数中?
    • return reverse('post-detail', kwargs={'pk': self.pk, 'slug': self.user_name.profile.slug}) 不起作用?
    • 对不起,你上次给出的答案有效,我第一次尝试时不小心删除了一个字符。谢谢
    猜你喜欢
    • 2022-11-07
    • 2020-11-26
    • 1970-01-01
    • 2021-10-18
    • 1970-01-01
    • 2014-04-12
    • 2021-06-05
    • 1970-01-01
    • 2011-01-05
    相关资源
    最近更新 更多