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)