Django Фильтр ошибок суб-выбора возвращает 2 столбца - ожидается 1 - PullRequest
1 голос
/ 31 марта 2020

Я хотел бы предложить те же категории сообщений на текущей странице, поэтому я пробую следующий код:

Мои просмотры:

def recipe(request, slug, message=''):
    post = get_object_or_404(Post, slug=slug)
    post_category = post.category.all() # get the categories of the post
    posts_same_category = Post.objects.filter(
        Q(category__name__icontains= post_category) # filter the same categories of the other posts
        ).filter(published=True).exclude(slug=slug) # exclude the current post and no publish posts

Мои модели:

class PostCategory(models.Model):
    name = models.CharField(max_length=100)

    def __str__(self):
        return self.name

class Post(models.Model):

    title = models.CharField(max_length=100)
    slug = models.SlugField(max_length=250, null=True, blank=True)
    category = models.ManyToManyField('PostCategory', blank=True)
    mealtype = models.ManyToManyField('MealType', blank=True)

У меня ошибка на странице сведений о сообщении:

sub-select returns 2 columns - expected 1

Я думаю, что проблема с ManytoManyField, но что я делаю не так?

Заранее спасибо за вашу помощь!

1 Ответ

1 голос
/ 31 марта 2020

Вы передаете объектов по сравнению с CharField .

Здесь

category__name__icontains= post_category
#category__name ---> CharField
#post_category ---> Query set [<PostCategory obj>....]

попробуйте что-нибудь, что принесет вам только имя или измените запрос соответствующим образом:

posts_same_category = Post.objects.filter(category__in=post.category.all(), published=True).exclude(slug=slug)

дополнительно вы можете получить посмотрите на prefetch_related

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...