Python 如何访问继承父类的子类对象?
我有继承父类的父类和子类。没关系,我可以用for循环进行迭代。现在我想访问子类(例如:'product_type',所以基本上,我不知道我们是如何从同一个循环中的子类继承内容的 views.pyPython 如何访问继承父类的子类对象?,python,django,class,Python,Django,Class,我有继承父类的父类和子类。没关系,我可以用for循环进行迭代。现在我想访问子类(例如:'product_type',所以基本上,我不知道我们是如何从同一个循环中的子类继承内容的 views.py from django.views import generic from . models import Category from django.shortcuts import render class CategoryListView(generic.ListView): model
from django.views import generic
from . models import Category
from django.shortcuts import render
class CategoryListView(generic.ListView):
model = Category
template_name = 'category_list.html'
models.py
from django.db import models
import uuid
class Category(models.Model):
name = models.CharField(max_length=100, help_text='Category name')
def __str__(self):
return self.name
class Meta:
verbose_name_plural = 'Categories'
class Product(models.Model):
product_name = models.CharField(max_length=255, help_text='Product name')
# product_spec = models.TextField(max_length=5000, help_text='Product specs')
product_type = models.ForeignKey('Category', on_delete=models.SET_NULL, null=True)
def __str__(self):
return self.product_name
category_list.html
{% extends 'base.html' %}
{% block body %}
{% for page in category_list %}
<li>{{ page.name }}</li>
<li>{{ page.product_name }} # <--------------- Now this is the point of
#my problem, I want to get
#product name from child
#class
#this returns empty <li>
{% endfor %}
{% endblock %}
{%extends'base.html%}
{%block body%}
{类别_列表%中的页面的百分比}
{{page.name}
{{page.product_name}}{p>您可以访问此
{% extends 'base.html' %}
{% block body %}
{% for page in category_list %}
<li>{{ page.name }}</li>
<li>{{ page.product_set.first.product_name }}
product name from child class, this returns empty <li>
{% endfor %}
{% endblock %}
{%extends'base.html%}
{%block body%}
{类别_列表%中的页面的百分比}
{{page.name}
{{page.product_set.first.product_name}
来自子类的产品名称,返回空
{%endfor%}
{%endblock%}
产品
中的产品类型
是一个针对SignKey
的,这意味着它们将是具有相同类别的多个产品
,因此它们存在两种解决方案
在product
one-to-one键中设置product\u-type
,通过{{page.product.product\u-name}}
打印该类别所有产品的列表,您可以通过迭代page.product\u set
来执行此操作,因为它是一个带有for循环的列表(iterable)
首先,将您的产品类型
名称更改为仅类别
更易于理解的方式,并向其添加一个属性相关名称
,如下所示:
class Product(models.Model):
name = models.CharField(max_length=255, help_text='Product name')
category = models.ForeignKey('Category', on_delete=models.SET_NULL, null=True, related_name='products')
然后在模板中
{% for category in category_list %}
{{ category.name }}
{% for product in category.products.all %}
{{ product.name}}
... other product data
{% endfor %}
{% endfior %}
建立关系OneToOne
意味着一个类别只能有一个产品,但事实并非如此。@SLDem我不知道业务逻辑;我的答案包括这两种情况。@SLDem好的,我有“电话耳机”,但仅此而已,我不知道它的名称……阅读我的答案,我重命名了产品上的字段
model@SLDem我知道,只是复制了你的代码,但仍然没有显示它应该显示的所有内容。这是疯狂的页面。产品集。首先。产品名称
无法解决固有的问题,即它们将是同一类别的多个产品ID你自己尝试了代码?是的,这必须起作用,只需确保你包含相关的名称
属性e并根据我的回答重命名字段。他们阻止我提问,哈哈。怪人!顺便说一句,找到了另一种方法。不幸的是,你的方法不起作用。我下一步要更深入,我想打印实例(与其他产品分开)例如:-page1.html仅包含手机型号-page2.html仅包含耳机型号…等等,有什么建议吗?添加类别
型号,并在产品
上添加外键,然后创建一些类别并为其分配产品,然后使用各自的类别筛选产品