【问题标题】:Django The QuerySet value for an exact lookup must be limited to one result using slicing ErrorDjango 精确查找的 QuerySet 值必须限制为使用切片错误的一个结果
【发布时间】:2022-01-16 13:18:55
【问题描述】:

当我想显示所有与类别相关的帖子时,我遇到了这个问题。 我在其他类似问题中找不到解决方案。 谢谢你。 错误:精确查找的 QuerySet 值必须使用切片限制为一个结果。

型号:

class Category(models.Model):
    title = models.CharField(max_length=255)
    slug = models.SlugField()

class Post(models.Model):
    title = models.CharField(max_length=255)
    slug = models.SlugField(unique=True)
    body = models.TextField()
    category = models.ForeignKey(Category, on_delete=models.CASCADE, blank=True, null=True)

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

查看:

class PostListView(ListView):
"""
Return all of the posts
"""
model = Post
ordering = '-created' 
context_object_name = 'posts'
template_name ='blog/post_list.html'

def get_queryset(self):
    qs = Post.objects.all()
    if self.kwargs.get('slug'):
        category_slug = self.kwargs.get('slug')
        qs = Post.objects.filter(category = Category.objects.filter(slug = category_slug))
    return qs

网址:

path('', PostListView.as_view(), name='posts'), # all of the posts
path('category/<slug:slug>/', PostListView.as_view(), name='categoryposts'),

模板:

    <div class="row">
        {% for post in posts %}
            <div class="col-md-4">
                <div class="card" style="width: 25rem; height: 34rem;">
                    <a href="{% url 'post' post.slug %}">
                        <img class="post-thumbnail card-img-top" src="{{post.thumbnail.url}}" alt="{{post.title}}" 
                        style="width: 24.9rem; height: 18rem;">
                    </a>
                    <div class="card-body">
                        <h5 class="card-title"><a href="{% url 'post' post.slug %}">{{post.title}}</a></h5>
                        <p class="post-updated">Last update at {{post.updated|date:"Y/M/d"}}</p>
                        <p>Post by <a href="">{{post.author}}</a></p>
                        {% if post.description %}
                        <p class="card-text">{{post.description|slice:"80"}}...</p>
                        {% else %}
                        <p class="card-text">{{post.body|slice:"80"}}...</p>
                        {% endif %}
                        <a href="{% url 'post' post.slug %}" class="btn btn-primary" style="position: absolute; bottom: 0.5rem;">Read</a>
                    </div>
                </div>
                <br>
            </div>
        {% endfor %}
    </div>

【问题讨论】:

    标签: django django-views django-templates django-generic-views


    【解决方案1】:

    我认为问题出在您的qs = Post.objects.filter(category = Category.objects.filter(slug = category_slug)) 行。 如果您想通过 slug 过滤 帖子,您可以通过 __in 进行此操作。

    qs = Post.objects.filter(category = Category.objects.filter(slug__in = category_slug))
    

    【讨论】:

    • 谢谢,但它不起作用。同样的错误。
    【解决方案2】:

    我找到了答案。 如果您在 qs 行中遇到同样的问题,请写下:

    category_slug = self.kwargs.get('slug')
    category = Category.objects.get(slug = category_slug)
    category_id = Category.objects.get(id = category.id)
    qs = Post.objects.filter(category = category_id)
    

    而不是这个:

    category_slug = self.kwargs.get('slug')
    qs = Post.objects.filter(category = Category.objects.filter(slug = category_slug))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-02
      • 1970-01-01
      • 2020-05-05
      • 2019-05-26
      • 1970-01-01
      • 2021-04-23
      • 1970-01-01
      • 2020-11-13
      相关资源
      最近更新 更多