Ich bin sehr neu in Django und konnte keine Lösung dafür finden. Wie kann ich 2 Abfragegruppen von verschiedenen Modellen in 1 Vorlage übergeben? Ich benutze Mptt Kategorien und staple damit für eine Weile. Ich weiß, dass ich etwas mit views.py machen muss, aber wie kann ich diese Suchanfragen kombinieren? Hier ist meine Models.pyVerschiedene Modelle in Django-Vorlage
from __future__ import unicode_literals
from django.db import models
from django.core.urlresolvers import reverse
from mptt.models import MPTTModel, TreeForeignKey
class Variant(MPTTModel):
category = models.CharField(max_length=500)
logo = models.ImageField(upload_to='images/', null=True, blank=True)
slug = models.SlugField(max_length=160, blank=True, null=True)
parent = TreeForeignKey('self', null=True, blank=True,
related_name='children', db_index=True,
on_delete=models.CASCADE)
class MPTTMeta:
order_insertion_by = ['category']
class Meta:
verbose_name = 'категория'
verbose_name_plural = 'категории'
def get_absolute_url(self):
return reverse('cosmetics:details', kwargs={'pk': self.pk})
def __str__(self):
return self.category
def is_second_node(self):
return True if (self.get_ancestors().count() == 1) else False
class Pic_Discription(models.Model):
variant = TreeForeignKey('Variant', null=True, blank=True)
model = models.CharField(max_length=500)
pic_title = models.ImageField(upload_to='images/', null=True, blank=True)
description = models.TextField(default='')
price = models.DecimalField(max_digits=10, decimal_places=2, default=0)
slug = models.SlugField(max_length=160,blank=True, null=True)
available = models.BooleanField(default=True)
class Meta:
verbose_name = 'Продукт'
verbose_name_plural = 'Продукты'
def __str__(self):
return self.model
def get_absolute_url(self):
return reverse('cosmetics:details', kwargs={'pk': self.pk})
Views.py
class CategoryView(generic.ListView):
model = Variant
template_name = 'cosmetics/homepage.html'
def get_context_data(self, *, object_list=None, **kwargs):
"""Get the context for this view."""
queryset = object_list if object_list is not None else self.object_list
page_size = self.get_paginate_by(queryset)
context_object_name = self.get_context_object_name(queryset)
if page_size:
paginator, page, queryset, is_paginated = self.paginate_queryset(queryset, page_size)
context = {
'paginator': paginator,
'page_obj': page,
'is_paginated': is_paginated,
'object_list': queryset
}
else:
context = {
'paginator': None,
'page_obj': None,
'is_paginated': False,
'object_list': queryset
}
if context_object_name is not None:
context[context_object_name] = queryset
context.update(kwargs)
context['nodes'] = context.get('object_list')
return super().get_context_data(**context)
Auch habe ich versucht, eine andere Klasse Ansicht zum Modell hinzufügen, aber es nicht
class ProductsView(generic.ListView):
model = Pic_Discription
template_name = 'cosmetics/homepage.html'
def get_queryset(self):
return Pic_Discription.objects.all()
Meine URLs funktioniert:
urlpatterns = [
#/cosmetics/
url(r'^$', views.CategoryView.as_view(), name='homepage'),
#/cosmetics/5/
url(r'^(?P<pk>[0-9]+)/$', views.DetailView.as_view(), name='details'),
url(r'^products/$', views.ProductsView.as_view(), name='products'),
]
Hier ist eine Vorlage:
{% load mptt_tags %}
{% block body %}
<div class="container-fluid2">
<div class="col-md-2 col-sm-2">
<div class="panel panel-default" id="categories">
<div class="panel-header" id="cat-head">Категории</div>
<div class="panel-body" id="content-cat">
{% recursetree nodes %}
<div class="
{% if node.is_root_node %}
root
{% elif node.is_child_node and not
node.is_leaf_node or node.is_second_node%}
child
{% elif node.is_leaf_node and not
node.is_root_node%}
leaf
{%endif%}">
{{node.category}}
</div>
{% if not node.is_leaf_node%}
<ul>{{children}}</ul>
{% endif %}
{% endrecursetree %}
</div>
</div>
</div>
{% for cosmetic in object_list %}
<div class="col-md-3 col-sm-4">
<div class="thumbnail">
<a href="{% url 'cosmetics:details' cosmetic.id %}">
{% if cosmetic.pic_title %}
<img src="{{ cosmetic.pic_title.url }}" class="img-responsive">
{% else %}
<h3>Изображение отсутствует</h3>
{% endif %}
</a>
<div class="caption" id="textyInfo">
<h2>{{ cosmetic.model }}</h2>
<!-- View Details -->
<a href="{% url 'cosmetics:details' cosmetic.id %}" class="btn btn-primary btn-sm" role="button">
Подробнее
</a>
</div>
</div>
</div>
{% cycle '' '' '' '' '' '<div class="clearfix visible-lg"></div>' %}
{% endfor %}
</div>
{% endblock %}
ich es weiß, aber wie kann ich es umsetzen views.py Code in bestehenden? –