Django 我想知道,';类别';知道要访问哪个模型
模板代码-Django 我想知道,';类别';知道要访问哪个模型,django,django-models,django-forms,django-views,django-templates,Django,Django Models,Django Forms,Django Views,Django Templates,模板代码- <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 %} 类别模型- class Category (models.Model
<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 %}
类别模型-
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)
位于类别中
以及产品
型号中
我只想知道为什么{{category.get_url}}
中的category知道访问category
中的方法,而不是Product
model
Foo类:
def blah():
返回“foo的废话”
分类栏:
def blah():
返回“酒吧的废话”
f=Foo()
f、 废话
这与您的示例中发生的情况类似。f
没有理由(即没有办法)访问Bar
类中的任何内容
在您的示例中,中间有一些步骤,即,有一个对象列表,然后将该列表传递给模板并循环。但这并不相关,该列表中的项目仍然是相同的类型(即,每个项目仍然是
类别
的一个实例),没有任何东西将它们更改为产品
(如果是,这将非常奇怪,尽管在Python中技术上是可能的)。因为它是类别
对象,这就是面向对象编程的工作原理(在Python中)。
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