Django: Как фильтровать и отображать категории для автора в посте

Django: Как фильтровать и отображать категории для автора в посте Думаю, что-то не так с get_queryset Category.objects.filter(post_author=username)

class Post(models.Model):
    exercisename = models.ForeignKey('Category', on_delete=models.CASCADE)
    hour = models.IntegerField(default=0 )
    min = models.IntegerField(default=0)
    file = models.FileField(null=True,blank=True,upload_to='Files')
    content = models.TextField()
    date_Posted = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
        



class Category(models.Model):
    name = models.CharField(max_length=100)
    description = models.TextField()
    image = models.ImageField(upload_to='images/') 


def userpost(request, username):
    
    context = { 
        'Category': Category.objects.filter(post_author=username),
    }
    return render(request, 'blog/user_Posts.html', context) 

Вы должны фильтровать категорию следующим образом:

Category.objects.filter(post_author__username=username)

Когда вы вызываете ForeignKey напрямую, он ожидает объект, а не поле. Поэтому вы используете __{field_name} для вызова точного поля в Django ORM.

Кроме того, ваша категория не имеет отношения к Post модели, или вообще имеет Author отношение...

сначала вам нужно иметь отношение между Post и Catagory, чтобы запрос работал!!!

class Post(models.Model):
    exercisename = models.ForeignKey('Category', on_delete=models.CASCADE)
    hour = models.IntegerField(default=0 )
    min = models.IntegerField(default=0)
    file = models.FileField(null=True,blank=True,upload_to='Files')
    content = models.TextField()
    date_Posted = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    category = models.ForeignKey('Category', on_delete=models.CASCADE)
        



class Category(models.Model):
    name = models.CharField(max_length=100)
    description = models.TextField()
    image = models.ImageField(upload_to='images/') 


def userpost(request, username):

    #this gives the username's posts and change the django query result to a python list
    # a list of catagories
    author_posts_catagories = Post.objects.filter(author=username).values_list('category',flat=True)
    
    context = { 
        # this gives you the selected user catagories from post
        'Category':Category.objects.filter(id__in = author_posts_catagories ) ,
    }
    return render(request, 'blog/user_Posts.html', context) 


Вернуться на верх