我想知道,'category'怎么知道要访问哪个模型



模板代码-

<a class="dropdown-item" href="{% url 'home' %}">All Products</a>
{% for category in links %}
<a class="dropdown-item" href="{{category.get_url}}">{{category}}</a>
{% endfor %}

context_processor.py

def menu_links(request):
links=Category.objects.all()
return dict(links=links)

类别模型-

class Category (models.Model):
name=models.CharField(max_length=250, unique=True)
slug=models.SlugField(max_length=250, unique=True)
description=models.TextField(blank=True)
image=models.ImageField(upload_to='category',blank=True)
def get_url(self):
return reverse('products_by_category',args=[self.slug])
def __str__(self):
return self.name

产品型号-

class Product(models.Model):
name=models.CharField(max_length=250, unique=True)
slug=models.SlugField(max_length=250, unique=True)
description=models.TextField(blank=True)
category=models.ForeignKey(Category, on_delete=models.CASCADE)
price=models.DecimalField(max_digits=10,decimal_places=2)
image=models.ImageField(upload_to='product',blank=True)
stock=models.IntegerField()
available=models.BooleanField(default=True)
created=models.DateTimeField(auto_now_add=True)
updated=models.DateTimeField(auto_now=True)
def get_url(self):
return reverse('product_detail',args=[self.category.slug,self.slug])
def __str__ (self):
return self.name

在这里,正如您所看到的,def get_url(self)CategoryProduct模型中我只是想知道为什么{{category.get_url}}中的类别知道访问Category中的方法,而不知道Product模型中的方法


class Foo:
def blah():
return "blah by foo"
class Bar:
def blah():
return "blah by bar"
f = Foo()
f.blah()

这与您的示例中发生的情况类似。f没有理由(即没有办法(访问Bar类中的任何内容。

在您的示例中,中间有一些步骤,即有一个对象列表,然后将该列表传递给模板并循环。但这并不相关,该列表中的项目仍然是相同的类型(即,每个项目仍然是Category的一个实例(,没有任何东西将它们更改为Product(如果更改了,那将非常非常奇怪,尽管在Python中技术上是可能的(。

最新更新