2017-12-27 10 views
0

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 %} 

Antwort

0

Gerade Kontext verwenden:

from .models import MyModel 

... 
context['my_model'] = MyModel.objects.all() 
.... 

in Ihrer Vorlage, zum Beispiel

{% for m in my_model %} 
    {% m.myfield %} 
{% enfor %} 
+0

ich es weiß, aber wie kann ich es umsetzen views.py Code in bestehenden? –

Verwandte Themen