如何解决如何在 Django 视图中返回所有不同的外键?
这是我的model.py:
class Category(models.Model):
name = models.CharField(max_length=50,unique=True)
description = models.CharField(max_length=255,default='')
def __str__(self):
return "%s" % (self.name)
class SubCategory(models.Model):
name = models.CharField(max_length=50,default='')
category = models.ForeignKey(Category,on_delete=models.CASCADE)
def __str__(self):
return self.name
class Meta:
ordering = ['name']
还有我的 view.py:
def home(request):
context = {
'home_page': "active",'categories': SubCategory.objects.order_by('category').distinct('category').values_list('category'),}
return render(request,'candidates/home.html',context)
和我的模板:
<ul>
{% for category in categories %}
<li>{{ category }}</li>
{% endfor %}
</ul>
我看到的不是类别名称,而是它们的 ID
我怎样才能得到他们的名字?
谢谢
解决方法
您应该使用类别的名称,因此:
def home(request):
context = {
'home_page': "active",'categories': SubCategory.objects.order_by('category__name').distinct('category__name').values_list('category__name',flat=True),}
return render(request,'candidates/home.html',context)
话虽如此,查询 Subcategory
没有多大意义。您可以通过以下方式获取 Category
列表:
def home(request):
context = {
'home_page': "active",'categories': Category.objects.order_by('name'),context)
或者,如果您只想要包含至少一个子类别的 Category
,您可以使用:
def home(request):
context = {
'home_page': "active",'categories': Category.objects.filter(subcategory__isnull=False).order_by('name').distinct(),context)
您可以通过以下方式简化 __str__
的 Category
:
class Category(models.Model):
name = models.CharField(max_length=50,unique=True)
description = models.CharField(max_length=255,default='')
def __str__(self):
return f'{self.name}'
EDIT:您可以按子类别的数量(降序)对 Category
进行排序:
def home(request):
context = {
'home_page': "active",'categories': Category.objects.annotate(
nsub=Count('subcategory')
).order_by('-nsub')
}
return render(request,context)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。