Last messages on forum in all categories/forum/ru-RUThu, 06 Jul 2017 10:43:47 +0000Оптимизация Джанги, куда девается время?/forum/topic/5435/#post-34380Всем привет! Изучаю Джанго и Питон, сделал простенький сайтик, но главная страница грузится очень долго - 1363 МС. Кэш работает, шаблон рендерится за 15 мс(то что не кэшировано). Но в время ожидания 13 (+1362) мс, не пойму куа оно девается и где его искать. Подскажите пожалуйста, как это можно отследить? Конфиг: Django + Wagtail последние, плагины всякие, даже не знаю что вам приложить сюда, чтобы можно было предметно говорить. Запросы к бд вроде нормальные. Запрос делаю на встроенный джанговский сервер, без нгикса, без много сессий. MIDDLEWARE = [ # 'django.middleware.cache.UpdateCacheMiddleware', # 'django.middleware.cache.CacheMiddleware', # 'htmlmin.middleware.HtmlMinifyMiddleware', 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'wagtail.wagtailcore.middleware.SiteMiddleware', 'wagtail.wagtailredirects.middleware.RedirectMiddleware', # other middleware classes # 'django.middleware.cache.FetchFromCacheMiddleware', # 'htmlmin.middleware.MarkRequestMiddleware', ] в дебаге стоит еще дебажная панелька ![Скрин][1] [1]: http://f3.s.qip.ru/veBVkrhw.pngstav_proglThu, 06 Jul 2017 10:32:43 +0000/forum/topic/5435/#post-34380Как принять запрос и положить его в базу./forum/topic/5433/#post-34377видимо приходит файл xml в POST запросе но это все равно что гадать на кофейной гущеOriginThu, 06 Jul 2017 07:11:13 +0000/forum/topic/5433/#post-34377Как принять запрос и положить его в базу./forum/topic/5433/#post-34376> xml запрос Что значит xml запрос? Есть GET и POST запросы, через них можно передавать данные в любом формате, в том числе и xml. /page/?xml=какие то данные [request-response][1] [1]: https://docs.djangoproject.com/en/1.11/ref/request-response/ModPhoenixWed, 05 Jul 2017 18:38:59 +0000/forum/topic/5433/#post-34376Как обновить массив в postgresql с помощью ORM Django 1.11?/forum/topic/5434/#post-34369в джанго нет такого поля `ArrayField` ., что значит термин "условная модель" ? она у вас есть или она только в базе ? если она только в базе вы можете обратиться к постгре из питона напрямую (используя соответствующий пакет и написал скуль запрос нужный вам) или использовать sqlalchemy OriginWed, 05 Jul 2017 13:06:32 +0000/forum/topic/5434/#post-34369Как обновить массив в postgresql с помощью ORM Django 1.11?/forum/topic/5434/#post-34367Всем привет. Есть у меня условная модель class Career(models.Model): year_arr = ArrayField(models.IntegerField()) В Postgresql 9.4 это поле типа "integer[]" и лежит запись в таком виде "{2010,2011,2012}" Возникло желание обновлять это поле в модели и пытаюсь сделать так career = Career.objects.all().update(year_arr=F('year_arr') + [3]) Но получаю сообщение об ошибке psycopg2.ProgrammingError: ОШИБКА: оператор не существует: integer[] + integer[]LINE 1: ... "career" SET "year_tech" = ("career"."year_tech" + ARRAY[3]... HINT: Оператор с данными именем и типами аргументов не найден. Возможно, вам следует добавить явные приведения типов. Погуглил но решения я так и не нашел. Помогите, кто чем сможет? TakumiWed, 05 Jul 2017 10:39:21 +0000/forum/topic/5434/#post-34367Шаблоны в папках приложений перестали работать./forum/topic/5431/#post-34361Здравствуйте! Разрабатывал приложение в Debian, сервер на Win. Всё было хорошо. Переносил туда - обратно. В какой-то момент похерил виртуальную машину с Debian. Установил всё с нуля. Проект перенёс с Винды. С регистром букв в mysql справился. Теперь такая проблема. Не хочет ни в какую Джанга искать Шаблоны в папках приложений. Ищет почему-то только в одном приложении. Джанга 1.8 Django tried loading these templates, in this order: Using loader django.template.loaders.filesystem.Loader: /home/misha/eclipse-workspace/Webportal/templates/Telemetry/index.html (File does not exist) Using loader django.template.loaders.app_directories.Loader: /usr/local/lib/python2.7/dist-packages/Django-1.8.18-py2.7.egg/django/contrib/admin/templates/Telemetry/index.html (File does not exist) /usr/local/lib/python2.7/dist-packages/Django-1.8.18-py2.7.egg/django/contrib/auth/templates/Telemetry/index.html (File does not exist) /home/misha/eclipse-workspace/Webportal/Webportal/templates/Telemetry/index.html (File does not exist) /home/misha/eclipse-workspace/Webportal/GATO/templates/Telemetry/index.html (File does not exist) А шаблон лежит в `/home/misha/eclipse-workspace/Webportal/Telemetry/templates/Telemetry/index.html` Работет только приложение GAITO. Уже не знаю куда копать. settings.py INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'Webportal', 'Hydro', 'GATO', 'Telemetry', 'GSiS', ) TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ] memantulovTue, 04 Jul 2017 04:16:45 +0000/forum/topic/5431/#post-34361Вызов связанных форм./forum/topic/5430/#post-34357 <p># {{Тут должны быть перечни размеров для данной категории товаров }}</p> заменить на {% for obj in gooditem.goodssize_set.all %} <p>{{ obj }}</p> {% endfor %} почти тоже самое с картинкойOriginMon, 03 Jul 2017 05:48:19 +0000/forum/topic/5430/#post-34357Вызов связанных форм./forum/topic/5430/#post-34354Доброго вечера! Суть проблемы такова: есть четыре модели: class Goods(models.Model): goods_name = models.CharField(max_length=50) lable = models.CharField(max_length=50) goods_about = models.TextField() cost = models.DecimalField(max_digits=7, decimal_places=2, default=0) is_active = models.BooleanField(default=True) categories = models.ForeignKey(Categories, blank=True, null=True, default=None) class GoodsSize(models.Model): goods = models.ForeignKey(Goods, related_name='size', blank=True, null=True, default=None) size_goods = models.CharField(max_length=15) count_storege = models.IntegerField(default=0) is_active = models.BooleanField(default=True) class GoodsImage(models.Model): goods = models.ForeignKey(Goods, blank=True, null=True, default=None) image = models.ImageField(upload_to='static/img_goods/') is_active = models.BooleanField(default=True) class Categories(models.Model): categories_name = models.CharField(max_length=30) Есть вьюха с помощью которой я обращаюсь к модели: def paginate_goods2(request): goods_list = Goods.objects.all() paginator = Paginator(goods_list, 8) page = request.GET.get('page') try: goods = paginator.page(page) except PageNotAnInteger: goods = paginator.page(1) except EmptyPage: goods = paginator.page(paginator.num_pages) return render(request, 'catalog.html', {'goods': goods}) Часть шаблона, в котором отражаю необходимые поля: {% for gooditem in goods %} <div class="col-lg-3"> <div id="bg_gray" class="good-item"> <img class="image-goods-main-page" src={{gooditem.image} alt="NOT"> <h4>{{ gooditem.goods_name }}</h4> <p> {{ gooditem.goods_about|truncatechars_html:100 }} </p> <p># {{Тут должны быть перечни размеров для данной категории товаров }}</p> <p> {{gooditem.goods.cost}} руб. </p> <div class="add-to-card-btn"> <button class="btn btn-success"> Довавить в корзину </button> </div> </div> </div> {% endfor %} Проблема: не могу в шаблоне отобразить картинку товара и список размеров конкретного товара. Обе модели(GoodsImage и GoodsSize) связаны с моделью Товары. Пробовал при помощи related_name - что-то у меня не выходит, может кто подскажет как сделать?BLR-55Fri, 30 Jun 2017 17:24:53 +0000/forum/topic/5430/#post-34354Кроссдоменный запрос разрешить/forum/topic/5428/#post-34351Помогите пожалуйста разрешить кроссдоменныйй запрос на локальной машине. У меня на локальной машине поднят апач. на хосте http://localhost/rurun/ есть яваскриптовый фронтэнд. Так же локально запущен django 1.11. Запущен командой: python manage.py runserver Это значит, что используется встроенный сервер. На django установлен следующий пакет: https://github.com/ottoyiu/django-cors-headers Так же в конфиге прописано следующее: INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'statistic', 'corsheaders', ] MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'corsheaders.middleware.CorsMiddleware', 'django.middleware.common.CommonMiddleware', ] CORS_ORIGIN_ALLOW_ALL = True После клика на кнопке, из фронэнда отправляется ajax-запрос к django. Но браузер в консоль выводит сообщение об ошибке: > XMLHttpRequest cannot load http://127.0.0.1:8000/days. No > 'Access-Control-Allow-Origin' header is present on the requested > resource. Origin 'http://localhost' is therefore not allowed access. > The response had HTTP status code 400. Вот более подробная информация из вкладки network: Request URL:http://127.0.0.1:8000/days Request Method:GET Status Code:400 Bad Request Remote Address:127.0.0.1:8000 Response Headers view source Content-Type:text/html Date:Thu, 29 Jun 2017 17:52:08 GMT Server:WSGIServer/0.2 CPython/3.5.2 Request Headers view source Accept:*/* Accept-Encoding:gzip, deflate, sdch, br Accept-Language:ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4 Connection:keep-alive Host:127.0.0.1:8000 Origin:http://localhost Referer:http://localhost/rurun/ User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36 X-Compress:null Ещё пробовал в конфиге прописывать разрешённые хосты в белом листе: CORS_ORIGIN_WHITELIST = ( 'localhost/rurun' ) Разные комбинации протоколов и портов тоже прбовал UPD: сейчас заметил, что консоль джанги вываливает такую ошибку: DisallowedHost at / Invalid HTTP_HOST header: '127.0.0.1:8000'. You may need to add '127.0.0.1' to ALLOWED_HOSTS. Я коненчо попробовал в белом листе прописать этот адрес и перезапустить сервер. Но сообщение об этой ошибке по-прежнему осталосьprozaik81-2Thu, 29 Jun 2017 18:15:13 +0000/forum/topic/5428/#post-34351Интерактивный сайт/forum/topic/5426/#post-34337Здравствуйте, наткнулся на очень интересные сайты. Очень красиво и интерактивно все работает, подскажите по средствам чего можно сделать подобное? Может JQuery или что нибудь подобное? http: brightmedia.pl/?lang=en&site=introyyyuuu123qFri, 23 Jun 2017 02:24:02 +0000/forum/topic/5426/#post-34337хостинг для Джанго/forum/topic/5340/#post-34333Хостим сайт на jino.ru, у нас нареканий нет. Много плохого говорили про этот хостинг, но отличить реальные отзывы от PR-компании конкурентов возможности нет.NikitaBelWed, 21 Jun 2017 21:31:00 +0000/forum/topic/5340/#post-34333хостинг для Джанго/forum/topic/5340/#post-34311 Рекомендую тебе [мало у тебя авторитета для этого], недорогой и стабильный хостинг, да-да не удивляйтесь, такие есть) Размещаешь, кэшируешь и сжимаешь картинки и радуешься сайту ракете.ol.skinny.ftpFri, 16 Jun 2017 13:27:22 +0000/forum/topic/5340/#post-34311Перестал работать виджет FilteredSelectMultiple/forum/topic/5423/#post-34332как я понимаю если поле модели Many2Many, в админке будет выбран виджет FilteredSelectMultiple. В django.contrib.admin.widgets.FilteredSelectMultiple указан перечень JS файлов: def media(self): js = ["core.js", "SelectBox.js", "SelectFilter2.js"] return forms.Media(js=["admin/js/%s" % path for path in js]) Все файлы подгружаются без ошибок. в консоли JS ошибок тоже нет.. :/ NikitaBelWed, 21 Jun 2017 20:47:27 +0000/forum/topic/5423/#post-34332Проблемы с UTF-8, что я делаю не так? /forum/topic/5421/#post-34327Ошибка скорее всего в том что загружаемые данные в win-1251, а ты явно задал utf8. Проверь кодировку в базе, скорее всего проблема там Либо переходит на 3й питон, там с кодировками проблем намного меньше.ZhbrTue, 20 Jun 2017 08:22:59 +0000/forum/topic/5421/#post-34327Ищу джуниора в помощники/forum/topic/5418/#post-34316> Почему именно джуниора? Хороший вопрос. Думаю несколько причин. Первое - думаю есть люди которые хотят **получить опыт** + денежку. Второе - более опытным коллегам нет возможности платить столько сколько поросят. Так как оплата не по часовая. DJWOMSSat, 17 Jun 2017 17:03:09 +0000/forum/topic/5418/#post-34316Проблемы с UTF-8, что я делаю не так? /forum/topic/5421/#post-34315модель выглядит class Towers(models.Model): class Meta(): db_table = 'towers' lat = models.FloatField() lon = models.FloatField() name_vl = models.CharField(max_length=254) tech_place = models.CharField(max_length=254) name_tech = models.CharField(max_length=254) name_obj = models.CharField(max_length=254) material = models.CharField(max_length=254) naznach = models.CharField(max_length=254) numb_chain = models.CharField(max_length=254) numb_rack = models.CharField(max_length=254) date_in = models.CharField(max_length=254) geom = models.MultiPointField(srid=32646) def __str__(self): # __unicode__ on Python 2 return u'%s %s %s %s %s %s %s %s %s' % (self.name_vl, self.tech_place, self.name_tech, self.name_obj, self.material, self.naznach, self.numb_chain, self.numb_rack, self.date_in) загрузчик так -*- coding: utf-8 -*- from __future__ import unicode_literals import os from django.contrib.gis.utils import LayerMapping from .models import Towers worldborder_mapping = { 'lat' : 'Lat', 'lon' : 'Lon', 'name_vl' : 'name_VL', 'tech_place' : 'tech_place', 'name_tech' : 'name_tech', 'name_obj' : 'name_obj', 'material' : 'material', 'naznach' : 'naznach', 'numb_chain' : 'numb_chain', 'numb_rack' : 'numb_rack', 'date_in' : 'date_in', 'geom' : 'MULTIPOINT', } for_bd = os.path.abspath( os.path.join(os.path.dirname(__file__), 'data', 'vlllroads.shp'), ) def run(verbose=True): lm = LayerMapping( Towers, for_bd, worldborder_mapping, transform=False, encoding='utf-8', ) lm.save(strict=True, verbose=verbose) Ошибка: DjangoUnicodeDecodeError: 'charmap' codec can't decode byte 0xb9 in position 6: character maps to <undefined>. You passed in '\xce\xef\xee\xf0\xe0 \xb9 1' (<type 'str'>) Не могу понять, что делаю не так. Вроде всё как в многочисленных примерах в интернете, но на выходе всё равно ошибка.SmArtemSat, 17 Jun 2017 12:58:49 +0000/forum/topic/5421/#post-34315Django фильтр/forum/topic/5413/#post-34313>зачем выделять модель геймсерч в отдельную модель со связью ФК ? >тяжело читать ваш код без Code Sample нормального... и где собственно модель джанго фильтра? еще не помешало бы описать что у вас есть (постановка задачи) и что должно быть в итоге. Может конечно я особенный и просто вас не понимаю использовал этот пример.[enter link description here][1] У меня есть игровые сервера у которых есть есть рейтинг-онлайн-рейты-тип сервера. есть шаблон таблицы где должны отображаться эти параметры , есть кнопка "подобрать сервер" выпадает окно и там (пока их нет) чекбоксы где пользователь ставил галочки и жмет применить фильтр - и соответственно получает результат. [1]: https://github.com/carltongibson/django-filtergoskoomerFri, 16 Jun 2017 18:14:05 +0000/forum/topic/5413/#post-34313регистрация пользователя на сайте/forum/topic/5416/#post-34303> я делаю manage.py help и появляется только syncdb. Ни migration or makemigrate нет С django-admin.py тоже самое в таком случае попробуйте переустановите Django pip uninstall Django pip install Django==нужная версия если не поможет удалите текущую бд и создайте новую.ModPhoenixFri, 16 Jun 2017 09:25:30 +0000/forum/topic/5416/#post-34303Несколько шаблонов в одном приложении/forum/topic/5417/#post-34295Не запускается новая страница, не создается страница внесения создания новой записи. Перекидывает на туже самую отчетную work.html по кругу. А если навести на ссылку по которой должна открываться страница создания новой записи - newuser.html то в подсказке выпадает все более увеличивающееся имя ссылки типа - 127.0.0.1:8000/work/newuser в первый раз с каждым разом прибавляется /newuser типа так 127.0.0.1:8000/work/newuser/newuser/newuser/newuser и никакого эффекта все также перекидывает на отчеты 127.0.0.1:8000/work/ и соответственно страницу отчетов work.htmlTViTThu, 15 Jun 2017 14:49:35 +0000/forum/topic/5417/#post-34295Ищу джуниора в помощники/forum/topic/5418/#post-34296Сейчас есть несколько проектов и по времени не успеваю работать над всеми. Ищу джуниора в помощники который будет брать часть работы на себя. Интересные задачи и хорошее ТЗ обещаю))) Естественно работа с оплатой. Кому интересно skype - djwoms1, e-mail - socanime@gmail.comDJWOMSThu, 15 Jun 2017 14:52:21 +0000/forum/topic/5418/#post-34296Несколько шаблонов в одном приложении/forum/topic/5417/#post-34288Всем привет. Решил переписать свой сайт добавить необходимую автоматизацию и другие возможности, учет заказов, статистика, отчеты. Время терпит поэтому решил осваивать Питон + Джанго, потом пригодится в любом случае. Поставил все в виртуальное окружение Питон 3.5.2 - Джанго 1.11.2 На bootstrap начальная страничка - homepage с переходами на админку и на шаблон из bootstrap таблица отчетов. Это у меня приложение папка work в нем в папке templates 2 шаблона сделал. Первый - собственно таблица bootstrap будет показывать всех клиентов услуги дефекты устройства и прочее. А с на ней вверху ссылка переход - "новая запись" о клиенте и нужной услуге отдельная страница где будут поля для заполнения потом соответственно сохранение в базу и показ на странице отчетов шаблон из bootstrap . И вот не могу понять логику почему не запускается эта отдельная страница - "новая запись" со страницы отчетов, стандартный пример-шаблон bootstrap. В homepage urls from django.conf.urls import include, url from django.http import HttpResponseRedirect from django.conf import settings from homepage import views urlpatterns = [ url(r'^', views.homepage, name='homepage'), ] views from django.shortcuts import render from django.http.response import HttpResponse from django.template.loader import get_template def homepage(request): name = "name" tek_dat = 'day is...' return render(request, 'Index.html',locals()) Сам проект urls from django.conf.urls import url, include from django.contrib import admin urlpatterns = [ url(r'^$', include('homepage.urls')), url(r'^work/', include('work.urls', namespace="work")), url(r'^work/newuser/', include('work.urls')), url(r'^admin/', admin.site.urls), ] Приложение учета work urls from django.conf.urls import include, url from django.http import HttpResponseRedirect from django.conf import settings from work import views urlpatterns = [ url(r'^', views.workpage, name='workpage'), url(r'^newuser/', views.newuser, name='newuser'), ] work - views from django.shortcuts import render from django.http.response import HttpResponse from django.template.loader import get_template def workpage(request): return render(request, 'work.html', locals()) def newuser(request): return render(request, 'newuser.html', locals()) TViTThu, 15 Jun 2017 12:20:49 +0000/forum/topic/5417/#post-34288Сайт, вернее MVP для газеты (Украина)/forum/topic/5415/#post-34285Украинская газета столкнулась с проблемой создания собственного сайта (для размещения материалов, для работы с источниками, агрегации новостей и информации, для создания «народного редактора»; есть еще много мечт, но точного тз нет — в этом и проблема, не знаем поведения предполагаемой аудитории в инете). Нужен на постоянную штатную (или временную) работу веб-программист для создания и запуска MVP, и дальнейшей работы с сайтом. Для MVP мы планируем (можно обсуждать элементы, но нам хочется только django для сайта и python3 для алгоритмов) обойтись «малой кровью» и использовать, по возможности, готовые продукты, адаптируя их под свои потребности, например: wagtail, bootstrap, инструменты и api соцсетей (особенно интересует информация из fb), статистика и т.д. Нужно будет запустить MVP на VPN, изменять, дополнять, изучать реакцию, в общем, нам нужен поиск своих технологий. Почему мы делаем акцент на **MVP** и на готовых продуктах — нам нужна именно исследовательская работа, а не сайт. Возможно, с неожиданными и **незатратными** разворотами на 180 градусов. В дальнейшем, по итогам MVP, планируем заказать разработку сайта у фирмы, то есть вам будет нужно создать тз, следить за разработкой, сроками, запуском, затем управлять работой сайта. Нам нужно знать о вашем опыте, что вы уже сделали. Затем мы поделимся инфой, что нам нужно. Вы — возможно — ответите сроками и суммой (зарплата или платежи по договору только в грн). *Газета «Публика», publika@publika.com.ua, тема — Django.*VadymWed, 14 Jun 2017 19:04:40 +0000/forum/topic/5415/#post-34285Django фильтр/forum/topic/5413/#post-34279Попробуйте вот так во вьюхе сортировать. Потом в шаблон выводить через контекст. top_rating = GameServer.objects.all().order_by('rating') Ну и дальше по аналогии [.order_by][1] [1]: https://docs.djangoproject.com/en/1.11/ref/models/querysets/#order-byModPhoenixTue, 13 Jun 2017 09:59:27 +0000/forum/topic/5413/#post-34279Проектирование системы комментирования/forum/topic/5407/#post-34277Вот что я изменил по сравнению с предыдущим показом. Создание дерева было реализовано в моделе комментариев, путем получения разными запросами родительских и вложенных комментариев. Я перенес создание дерева во вюху (пока что), как советовал lampslave. Вот как это работает: р def filter_by_instance(self, instance): content_type = ContentType.objects.get_for_model(instance.__class__) object_id = instance.id qs = super(CommentManager, self).filter(content_type=content_type, object_id=object_id) return qs Получаем все комментарии для поста: comments = Comment.objects.filter_by_instance(post).select_related() Обязательно нужно использовать .select_related() для получения связанных моделей. SQL запрос без .select_related() SELECT ••• FROM "comments" WHERE ("comments"."object_id" = '1' AND "comments"."content_type_id" = '7') ORDER BY "comments"."date" ASC с ним SELECT ••• FROM "comments" INNER JOIN "django_content_type" ON ("comments"."content_type_id" = "django_content_type"."id") INNER JOIN "auth_user" ON ("comments"."user_id" = "auth_user"."id") WHERE ("comments"."content_type_id" = '7' AND "comments"."object_id" = '1') ORDER BY "comments"."date" ASC Сортируем комментарии нулевого и первого уровней comments_parent = [] comments_children = [] for comment in comments: if comment.parent_id is None: comments_parent.append(comment) else: comments_children.append(comment) Выводим в шаблоне(тут конечно минус что много логики в шаблоне): {% for comment in comments_parent %} <div id="comment-{{ comment.id }}" class="card p-3"> <blockquote class="card-block card-blockquote"> <div> <small class="text-muted"> {{ comment.user }} <cite title="Source Title">{{ comment.date|timesince }} назад</cite> </small> </div> <p>{{ comment.content }}</p> </blockquote> <form method="POST" action=""> {% csrf_token %} {{ comment_form }} <input type="hidden" name="parent_id" value="{{ comment.id }}"> <p><input type="submit" class="btn btn-primary btn-comment" value="Ответить"></p> </form> </div> {% for child_comment in comments_children %} {% if child_comment.parent_id == comment.id %} <div id="comment-{{ child_comment.id }}" class="reply card p-3"> <blockquote class="card-block card-blockquote"> <div> <small class="text-muted"> {{ child_comment.user }} <cite title="Source Title">{{ child_comment.date|timesince }} назад</cite> </small> </div> <p>{{ child_comment.content }}</p> </blockquote> <form method="POST" action=""> {% csrf_token %} {{ comment_form }} <input type="hidden" name="parent_id" value="{{ comment.id }}"> <p><input type="submit" class="btn btn-primary btn-comment" value="Ответить"></p> </form> </div> {% endif %} {% endfor %} {% endfor %} В итоге выходит мы получаем все данные с базы для комментариев 1 запросом, потом сортируем по вложенности и выводим в шаблоне.ModPhoenixTue, 13 Jun 2017 05:14:32 +0000/forum/topic/5407/#post-34277Django фильтр/forum/topic/5413/#post-34271Добрый вечер. Такая ситуация: (это я делаю для практики,учу джанго) Есть модель class GameServer(models.Model) и мне нужно сделать фильтр - по рейтенгу ,рейтам ,голосам и т.д.. я понимаю что для опытных людей легче сказать учу доки т.п. все есть,я 3 день стою на одном месте не могу разобраться что нужно чтоб появился этот долбаный фильтр и отобразить его в штмл шаблоне вот ниже код. Я читаю эту документацию и не могу сообразить как подставить свое и вывести это,подскажите решение или где копать. модель from django.db import models import django_filters class GameServer(models.Model): name = models.CharField(max_length=30) voic = models.CharField(blank=True, max_length=50) rating = models.CharField(blank=True, max_length=60) is_active = models.BooleanField(default=True) description = models.TextField(blank=True, null=True, default=None) created = models.DateTimeField(auto_now_add=True, auto_now=False) updated = models.DateTimeField(auto_now_add=False, auto_now=True) def __str__(self): return "%s,%s, %s" % (self.name, self.voic, self.rating) class Meta: verbose_name = 'Сервер' verbose_name_plural = 'Сервера' class GameServerImage(models.Model): sever = models.ForeignKey(GameServer, blank=True, null=True, default=None) image = models.ImageField(upload_to='server_images/') is_main = models.BooleanField(default=False) is_active = models.BooleanField(default=True) created = models.DateTimeField(auto_now_add=True, auto_now=False) updated = models.DateTimeField(auto_now_add=False, auto_now=True) def __str__(self): return "%s" % self.id class Meta: verbose_name = 'Фотография' verbose_name_plural = 'Фотографии' class GameServerFilter(django_filters.FilterSet): class Meta: model = GameServer fields = ['name', 'voic', 'rating'] вьюха from django.shortcuts import render import django_filters.views from django import forms from l2.models import GameServer, GameServerFilter def GameServerFilter(request): filter = GameServerFilter(request.GET, queryset=GameServer.objects.all()) return render(request, 'l2/l2.html', {'filter': filter}) def l2(request): context = {} game_servers_filters = request.GET.getlist("game_servers_filters") kwargs = dict() game_servers = GameServer.objects.filter() # Список всех серверов if game_servers_filters: kwargs["id__in"] = game_servers_filters game_servers = GameServer.objects.filter() context['server'] = GameServer.objects.all() return render(request, 'l2/l2.html', context={'game_servers': game_servers}) return (request, 'l2/l2.html', {'filter': filter}) ![enter image description here][1] [1]: http://cdn1.savepice.ru/uploads/2017/6/10/606872e70c09762a6db07f89cf05cb11-full.jpg skoomerSat, 10 Jun 2017 19:25:37 +0000/forum/topic/5413/#post-34271Проектирование системы комментирования/forum/topic/5407/#post-34270проверил django-debug-toolbar количество SQL запросов `4,20 ms (14 запросов включая дублей: 11 )` откуда берутся эти дубли и нормально ли это? Если нет то как от них избавится? ![enter image description here][1] [1]: http://i.imgur.com/L1I2SKW.jpgModPhoenixSat, 10 Jun 2017 16:45:15 +0000/forum/topic/5407/#post-34270Снова об образовании/forum/topic/5153/#post-34268 pathfindermindFri, 09 Jun 2017 13:40:55 +0000/forum/topic/5153/#post-34268Проектирование системы комментирования/forum/topic/5407/#post-34265Спасибо за исходники, нашел еще в интернете видео урок и еще исходники совместил все и на данный момент вышло следующее. Модель комментариев: from django.conf import settings from django.db import models from django.contrib.contenttypes.fields import GenericForeignKey from django.contrib.contenttypes.models import ContentType class CommentManager(models.Manager): def filter_by_instance(self, instance): content_type = ContentType.objects.get_for_model(instance.__class__) object_id = instance.id qs = super(CommentManager, self).filter(content_type=content_type, object_id=object_id).filter(parent=None) return qs class CommentAbstractModel(models.Model): content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE) object_id = models.PositiveIntegerField() content_object = GenericForeignKey('content_type', 'object_id') class Meta: abstract = True class Comment(CommentAbstractModel): user = models.ForeignKey(settings.AUTH_USER_MODEL) content = models.TextField(unique=False) date = models.DateTimeField(auto_now_add=True) modified = models.DateTimeField(auto_now=True) karma = models.IntegerField(default=0) parent = models.ForeignKey('self', on_delete=models.CASCADE, blank=True, null=True) objects = CommentManager() class Meta(CommentAbstractModel.Meta): db_table = 'comments' ordering = ['date'] def __str__(self): return "%s: %s..." % (self.user.username, self.content[:50]) def children(self): return Comment.objects.filter(parent=self) Views: def single_post(request, id, slug): post = get_object_or_404(Post, id=id) comments = post.get_comments initial_data = { "content_type": post.get_content_type, "object_id": post.id } comment_form = CommentForm(request.POST or None, initial=initial_data) if comment_form.is_valid(): c_type = comment_form.cleaned_data.get("content_type") content_type = ContentType.objects.get(model=c_type) object_id = comment_form.cleaned_data.get("object_id") content_data = comment_form.cleaned_data.get("content") parent_obj = None try: parent_id = int(request.POST.get("parent_id")) except: parent_id = None if parent_id: parent_qs = Comment.objects.filter(id=parent_id) if parent_qs.exists(): parent_obj = parent_qs.first() new_comment = Comment.objects.create( user = request.user, content_type = content_type, object_id = object_id, content = content_data, parent = parent_obj, ) return HttpResponseRedirect ("%s#comment-%s" % (new_comment.content_object.get_absolute_url(), new_comment.id)) context = { "post": post, "comments": comments, "comment_form": comment_form, } return render(request, "blog/single.html", context) И шаблон: {% for comment in comments %} <div id="comment-{{ comment.id }}" class="card p-3"> <blockquote class="card-block card-blockquote"> <div> <small class="text-muted"> {{ comment.user }} <cite title="Source Title">{{ comment.date|timesince }} назад</cite> </small> </div> <p>{{ comment.content }}</p> </blockquote> <form method="POST" action=""> {% csrf_token %} {{ comment_form }} <input type="hidden" name="parent_id" value="{{ comment.id }}"> <p><input type="submit" class="btn btn-primary btn-comment" value="Ответить"></p> </form> </div> {% for child_comment in comment.children %} <div id="comment-{{ child_comment.id }}" class="reply card p-3"> <blockquote class="card-block card-blockquote"> <div> <small class="text-muted"> {{ child_comment.user }} <cite title="Source Title">{{ child_comment.date|timesince }} назад</cite> </small> </div> <p>{{ child_comment.content }}</p> </blockquote> <form method="POST" action=""> {% csrf_token %} {{ comment_form }} <input type="hidden" name="parent_id" value="{{ comment.id }}"> <p><input type="submit" class="btn btn-primary btn-comment" value="Ответить"></p> </form> </div> {% endfor %} {% endfor %} Все работает нормально, но это только тестовая реализация. Нужно еще удаление комментариев корректное сделать. Использовал GenericForeignKey потому что мне нужны будет комментарии под разными моделями.ModPhoenixFri, 09 Jun 2017 08:23:10 +0000/forum/topic/5407/#post-34265Django + channels/forum/topic/5412/#post-34259Доброго вечера! Пытаюсь разобраться в django channels. В целом суть ясна, но я запоролся на такой, видимо, очевидной вещи, что и в документации ответа не нашел. Если взять пример из интернета ([конкретно вот этот][1]), то я получаю вот такой результат ![][2]Если запустить manage.py runserver, то он сообщает "2017-06-08 20:24:16,325 - ERROR - server - Error trying to receive messages: unknown command 'EVALSHA'" Я не понимаю как запустить все это так, чтоб он работал не только на channel уровне, но и еще отвечал на запросы из браузера. [1]: https://github.com/adilkhash/django_channels_demo [2]: http://puu.sh/wewr1/99b882afc1.pngkondor195Thu, 08 Jun 2017 18:28:45 +0000/forum/topic/5412/#post-34259Django ORM отобрать значения больше нуля./forum/topic/5411/#post-34256Вообще-то в фильтре указываются не булевы операторы, а свои, gt,gte,lt,lte. Посмотри внимательно мануал по фильтрам orm. Смотри тут: /rel1.9/ref/models/querysets.html#field-lookupsZhbrWed, 07 Jun 2017 19:55:15 +0000/forum/topic/5411/#post-34256