首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >评论位于/posts/posts/in/uthi- ImproperlyConfigured /ImproperlyConfigured/

评论位于/posts/posts/in/uthi- ImproperlyConfigured /ImproperlyConfigured/
EN

Stack Overflow用户
提问于 2021-01-04 15:14:28
回答 1查看 52关注 0票数 0

所以我有一个叫做明星社交项目的项目,这个项目类似于一个社交媒体,你可以发布和创建组,但这个项目只能在你在组中的时候发布。所以我得到了一个错误信息,这是对我不熟悉的title.The解决方案,我已经尝试是我添加了获取绝对urls到我的帖子模型,但我仍然得到这个错误,现在我非常沮丧,我不知道什么do.So为什么我得到这个错误是因为我试图创建一个评论区,当我点击添加评论时,我就得到了错误信息。所以我在这里请求别人的帮助,因为我对这个错误并不是很熟悉,而且我现在只学习了大约2个月的django。

帖子models.py

代码语言:javascript
复制
from django.contrib.auth import get_user_model
from django.db import models
from groups.models import Group
from misaka import html
from django.urls import reverse
from django.utils import timezone
from django.shortcuts import get_object_or_404

User = get_user_model()

class Post(models.Model):

    user = models.ForeignKey(User, related_name='posts', on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now=True)
    message = models.TextField()
    message_html = models.TextField(editable=False)
    group = models.ForeignKey(Group, related_name='posts', null=True, blank=True, on_delete=models.CASCADE)

    def __str__(self):
        return self.message

    def save(self, *args, **kwargs):

        self.message_html = html(self.message)
        super().save(*args, **kwargs)

    def get_absolute_url(self):
        return reverse(
            'posts:single',
            kwargs={
                'username': self.user.username,
                'pk': self.pk
            }
        )

    class Meta:

        ordering = ['-created_at']

class Comment(models.Model):

    post = models.ForeignKey(Post, related_name='comments', on_delete=models.CASCADE)
    username = models.CharField(max_length=50)
    text = models.TextField()
    created = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.text

    # This is my solution on the error but im still getting that error message
    def get_absolute_url(self):
        return reverse('groups:single', kwargs={'slug': self.slug})

组models.py

代码语言:javascript
复制
from django.contrib.auth import get_user_model
from django import template
from django.db import models
from django.utils.text import slugify
from misaka import html
from django.urls import reverse

User = get_user_model()
register = template.Library()

class Group(models.Model):

    name = models.CharField(max_length=255, unique=True)
    slug = models.SlugField(allow_unicode=True, unique=True)
    description = models.TextField(blank=True, default="")
    description_html = models.TextField(editable=False, blank=True, default="")
    members = models.ManyToManyField(User, through='GroupMember')

    def __str__(self):
        return self.name

    def save(self, *args, **kwargs):

        self.slug = slugify(self.name)
        self.description_html = html(self.description)
        super().save(*args, **kwargs)

    def get_absolute_url(self):
        return reverse('groups:single', kwargs={'slug': self.slug})

    class Meta:
        ordering = ['name']

class GroupMember(models.Model):

    user = models.ForeignKey(User, related_name='user_groups', on_delete=models.CASCADE)
    group = models.ForeignKey(Group, related_name='memberships', on_delete=models.CASCADE)

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

    class Meta:

        unique_together = ('user', 'group')

帖子urls.py

代码语言:javascript
复制
from django.urls import path
from posts import views

app_name = 'posts'

urlpatterns = [
    path('', views.PostList.as_view(), name='all'),
    path('by/<username>/', views.UserPost.as_view(), name='for_user'),
    path('by/<username>/<int:pk>/', views.PostDetail.as_view(), name='single'),
    path('new/', views.CreatePost.as_view(), name='create'),
    path('delete/<int:pk>/', views.DeletePost.as_view(), name='delete'),
    path('posts/in/<slug>/comment/', views.AddComment.as_view(), name='add_comment'),
]

组urls.py

代码语言:javascript
复制
from django.urls import path
from groups import views

app_name = 'groups'

urlpatterns = [
    path('new/', views.CreateGroup.as_view(), name='create'),
    path('posts/in/<slug>/', views.SingleGroup.as_view(), name='single'),
    path('', views.ListGroups.as_view(), name='all'),
    path('join/<slug>/', views.JoinGroup.as_view(), name='join'),
    path('leave/<slug>/', views.LeaveGroup.as_view(), name='leave'),
]

帖子views.py

代码语言:javascript
复制
class AddComment(LoginRequiredMixin, generic.CreateView):

    model = Comment
    template_name = 'posts/comment_form.html'
    fields = '__all__'

_post.html

代码语言:javascript
复制
<div class="media">
    <h3 class="mr-5"><a href="{% url 'posts:for_user' username=post.user.username %}">@{{ post.user.username }}</a></h3>

    <div class="media-body">
        <strong>{{ post.user.username }}</strong>
        <h5>{{ post.message_html|safe }}
            <time class="time"><a href="{% url 'posts:single' username=post.user.username pk=post.pk %}">{{ post.created_at }}</a></time>

            {% if post.group %}
                <span class="group-name">in <a href="#">{{ post.group.name }}</a></span>
            {% endif %}
        </h5>

        <h2>Comment...</h2>
        {% if not post.comments.all %}
            <h3>No comment yet...</h3>
            <a href="{% url 'posts:add_comment' slug=group.slug %}">Add Comment</a>
        {% else %}  
            <a href="{% url 'posts:add_comment' slug=group.slug %}">Add Comment</a>
            <br>
            {% for comment in post.comments.all %}
            <br>
                {{ comment.text }}
            <br>
                <strong>
                    {{ comment.username }} -
                    {{ comment.created }}
                </strong>
            <br>
            {% endfor %}
        {% endif %}

        <div class="media-footer">
            {% if user.is_authenticated and post.user == user and not hide_delete %}
                <a class="btn btn-simple" href="{% url 'posts:delete' pk=post.pk %}" title="delete"><span class="fa fa-remove text-danger" aria-hidden="true"></span><span class="text-danger icon-label">Delete</span></a>
            {% endif %}
        </div>
    </div>
</div>

comment_form.html

代码语言:javascript
复制
{% extends 'posts/post_base.html' %}

    {% block post_content %}
        <h2>Add Comment</h2>

        <form id="commentForm" method="POST">
            {% csrf_token %}
            {{ form.as_p }}
            <button class="btn btn-large btn-primary">Add Comment</button>
        </form>
    {% endblock %}
EN

回答 1

Stack Overflow用户

发布于 2021-01-04 16:41:36

发生此错误是因为您正在尝试访问注释模型中的slug

代码语言:javascript
复制
def get_absolute_url(self):
        return reverse('groups:single', kwargs={'slug': self.slug})

注释模型不包含任何名为slug的列,有两种方法可以处理此错误,首先可以在Comment模型中创建slug字段,并从url传递slug值。Ans的第二个特点是,您可以在urls.py中添加id而不是slug

代码语言:javascript
复制
app_name = 'posts'

urlpatterns = [
....
 path('posts/in/<id>/comment/', views.AddComment.as_view(), name='add_comment'),
]

在您的posts models.py类注释(models.Model)中:........定义字符串(Self):返回self.text

代码语言:javascript
复制
# This is my solution on the error but im still getting that error message
def get_absolute_url(self):
    return reverse('posts:add_comment', kwargs={'id': self.id})

您正在尝试与groups应用程序中未定义的方式相反,因为没有这种类型的url

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65558936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档