我如何在 Django 3.2 中通过外键获取对象

问题描述

我正在为 Irvine 类构建菜单项,并希望按 Category

对它们进行分类

models.py

class Irvine(models.Model):
    objects = None
    name = models.CharField(max_length=50,verbose_name='Irvine Item')
    description = models.TextField(null=True,blank=True)
    size = models.FloatField(null=True,blank=True)
    price = models.FloatField(null=True,blank=True)
    published = models.DateTimeField(auto_Now_add=True,db_index=True)

    category = models.ForeignKey('Category',null=True,on_delete=models.PROTECT,verbose_name='Category')

    def __str__(self):
        return self.name

    class Meta:
        verbose_name_plural = 'Irvine'
        verbose_name = 'Irvine Item'
        ordering = ['-published']


class Category(models.Model):
    objects = None
    name = models.CharField(max_length=30,db_index=True,verbose_name="Category")
    published = models.DateTimeField(auto_Now_add=True,db_index=True)

    def __str__(self):
        return self.name

    class Meta:
        verbose_name_plural = '* Categories'
        verbose_name = 'Category'
        ordering = ['name']

view.py

def irvine(request):
    irvine = Irvine.objects.all()
    context = {'irvine': irvine}
    return render(request,'cafe/irvine.html',context)

def by_category(request,category_id):
    santaanna = SantaAnna.objects.filter(category=category_id)
    costamesa = CostaMesa.objects.filter(category=category_id)
    irvine = Irvine.objects.filter(category=category_id)
    categories = Category.objects.all()
    current_category = Category.objects.get(pk=category_id)
    context = {'santaanna': santaanna,'categories': categories,'costamesa': costamesa,'irvine': irvine,'current_category': current_category}

    return render(request,'cafe/by_category.html',context)

urls.py

urlpatterns = [
    path('add/',ItemsCreateView.as_view(),name='add'),path('<int:category_id>/',by_category,name='by_category'),path('',index,name='index'),path('irvine',irvine),

  {% for i in irvine %}
    {}
    <tr class="danger">

      <th scope="row" width="20%">{{ i.name }}</th>
      <td width="60%">{{ i.description }}</td>
      <td width="10%">{{ i.size }}</td>
      <td width="10%">{{ i.price }}</td>

    </tr>
  {% endfor %}

我可以从 Irvine 课程中获取所有物品,但是如何按类别从该课程中获取物品

解决方法

您不能直接使用 i.category 进行检查,因为它具有值列表。

尝试使用 i.category.name

如果你有序列化器,请更新完整代码。

{% for i in irvine %} {% if i.category.name == 'Appetizers' %},它会起作用