Home > OS >  Can I access the child model from the parent?
Can I access the child model from the parent?

Time:10-26

I have created a productForArt and albomForArt model From producForArt I inherit to albomForArt Making a view based on generic.ListView And I output it in the template, Can I access the number Of Pages field in the template albomForArt models, or in this case Django returns an object of the albomForArt model, but with properties that were inherited from albomForArt?

models

from django.db import models


class productForArt(models.Model):
    class Meta:
        verbose_name = u'товар'
        verbose_name_plural = u'товары'
    price = models.IntegerField(verbose_name="цена", default=0)
    title = models.CharField(max_length=300, verbose_name="название товара", null=True)
    description = models.CharField( max_length=1000,verbose_name="Описание товара", null=True)
    type = models.ForeignKey('typeProductForArt', on_delete=models.PROTECT)
    def getType(self):
        return  self.type
    def __str__(self):
        return str(self.title)   ' по цене'   str(self.price)   ' шт'

class albomForArt(productForArt):
    numberOfPages = models.IntegerField(default=10,verbose_name="количество станиц" )


class typeProductForArt(models.Model):
    title = models.CharField(max_length=200, default="none")
    def __str__(self):
        return self.title

vievs

from django.views import View, generic
from .models import productForArt

class startPage(generic.ListView):
    model = productForArt
    template_name = "startPage.html"
    context_object_name = "productForArt_list"
    queryset = productForArt.objects.all()[:20]

templates

{% if productForArt_list %}
    <section >
        {% for productForArt in object_list %}
        <article >
            <h1>{{productForArt.title}}</h1>
            <p>{{productForArt.description}}</p>
            {% endif %}
        </article>
        {% endfor %}
    </section>
{% else %}
    <p>товара нету</p>
{% endif %}

CodePudding user response:

You can use One-to-one relationships

class albomForArt(productForArt):
   product_for_art = models.OneToOneField(productForArt, on_delete=models.CASCADE)
   numberOfPages = models.IntegerField(default=10,verbose_name="количество станиц" )

Then in Template

        {% if productForArt_list %}
<section >
    {% for productForArt in object_list %}
    <article >
        <h1>{{productForArt.product_for_art.title}}</h1>
        <p>{{productForArt.product_for_art.description}}</p>
        {% endif %}
    </article>
    {% endfor %}
</section> {% else %} <p>товара нету</p>{% endif %}
  • Related