Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何访问继承父类的子类对象?_Python_Django_Class - Fatal编程技术网

Python 如何访问继承父类的子类对象?

Python 如何访问继承父类的子类对象?,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

我有继承父类的父类和子类。没关系,我可以用for循环进行迭代。现在我想访问子类(例如:'product_type',所以基本上,我不知道我们是如何从同一个循环中的子类继承内容的

views.py

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仅包含耳机型号…等等,有什么建议吗?添加
    类别
    型号,并在
    产品
    上添加外键,然后创建一些类别并为其分配产品,然后使用各自的类别筛选产品