Guest User

Untitled

a guest
May 27th, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.48 KB | None | 0 0
  1. MODELS.PY
  2.  
  3. # -*- coding: utf-8 -*-
  4.  
  5. from django.db import models
  6. from mptt.fields import TreeForeignKey
  7. from mptt.models import MPTTModel
  8.  
  9. class CatalogFolder(MPTTModel):
  10.  
  11. title = models.CharField(max_length=50, verbose_name=u'Название')
  12. parent = TreeForeignKey('self', blank=True, null=True, related_name='folder', verbose_name=u'Категория')
  13. display = models.BooleanField(verbose_name=u'Отображается на главной странице')
  14.  
  15. def __unicode__(self):
  16. return self.title
  17.  
  18. class Meta:
  19. verbose_name = u'Категория'
  20. verbose_name_plural = u'Категории'
  21.  
  22. @models.permalink
  23. def get_absolute_url(self):
  24. return 'object-list', (), {'folder_id': self.id}
  25.  
  26. class CatalogItem(MPTTModel):
  27.  
  28. title = models.CharField(max_length=50, verbose_name=u'Название')
  29. parent = TreeForeignKey(CatalogFolder, blank=True, null=True, related_name='item', verbose_name=u'Категория')
  30. short_description = models.TextField(blank=True, verbose_name=u'Краткое описание',
  31. help_text=u'Краткое описание наименования товара')
  32. description = models.TextField(blank=True, verbose_name=u'Описание', help_text=u'Описание наименования товара')
  33.  
  34. def __unicode__(self):
  35. return self.title
  36.  
  37. class Meta:
  38. verbose_name = u'Наименование'
  39. verbose_name_plural = u'Наименования'
  40.  
  41. @models.permalink
  42. def get_absolute_url(self):
  43. return 'item-detail', (), {'pk': self.pk}
  44.  
  45. URLS.PY
  46.  
  47. # -*- coding: utf-8 -*-
  48.  
  49. from catalog.views import ObjectListView, ItemDetailView
  50. from django.conf.urls.defaults import patterns, include, url
  51.  
  52. urlpatterns = patterns('',
  53. url(r'^$', ObjectListView.as_view(), name="object-list"),
  54. url(r'^(?P<folder_id>\d+)/$', ObjectListView.as_view(), name="object-list"),
  55. url(r'^(?P<pk>\d+)/$', ItemDetailView.as_view(), name="item-detail"),
  56. )
  57.  
  58. VIEWS.PY
  59.  
  60.  
  61. # -*- coding: utf-8 -*-
  62.  
  63. from django.shortcuts import get_object_or_404
  64. from django.views.generic.detail import DetailView
  65. from django.views.generic.list import ListView
  66. from catalog.models import CatalogFolder, CatalogItem
  67.  
  68. class ObjectListView(ListView):
  69.  
  70. context_object_name = "object_list"
  71. template_name = "catalog/object_list.html"
  72.  
  73. def get_queryset(self):
  74.  
  75. if 'folder_id' not in self.kwargs:
  76. folders = CatalogFolder.objects.filter(parent=None)
  77. if folders:
  78. return folders
  79. else:
  80. return CatalogItem.objects.filter(parent=None)
  81. else:
  82. self.parent = get_object_or_404(CatalogFolder, pk=self.kwargs['folder_id'])
  83. folders = CatalogFolder.objects.filter(parent=self.parent)
  84. if folders:
  85. return folders
  86. else:
  87. return CatalogItem.objects.filter(parent=self.parent)
  88.  
  89. def get_context_data(self, **kwargs):
  90. context = super(ObjectListView, self).get_context_data(**kwargs)
  91. if 'folder_id' in self.kwargs:
  92. context['folder'] = get_object_or_404(CatalogFolder, pk=self.kwargs['folder_id'])
  93. return context
  94.  
  95. class ItemDetailView(DetailView):
  96.  
  97. context_object_name = "item_detail"
  98. template_name = "catalog/item_detail.html"
  99.  
  100. def get_queryset(self):
  101. return CatalogItem.objects.all()
Add Comment
Please, Sign In to add comment