Задать вопрос
Ответы пользователя по тегу Django
  • Как добавить свой рендеринг страницы в админке?

    syschel
    @syschel
    freelance/python/django/backend
    Как изменить шаблон действующей страницы в админке, указал Astrohas
    Но если теперь нужно в пределах админки создать новую страницу (не относящуюся к существующему функционалу CRUD), куда и будет указывать ссылка из изменённого шаблона. То переопределяем get_urls()
    P.S. Вьюху от данного проекта можно в файле admin.py описать как в примере, но я бы вынес всётаки в views.py

    пример:
    class PetAdmin(admin.ModelAdmin):
        ...
        def get_urls(self):
            urls = super(PetAdmin, self).get_urls()
            my_urls = [
                url(r'^(?P<id>\d+)/radius/$', self.admin_site.admin_view(PetAdminRadius))
            ]
            return my_urls + urls

    И открывается сиё чудо по адресу:
    localhost:8000/admin/app_name/model_name/639/radius
    Ответ написан
    Комментировать
  • Как скрыть некоторые поля для отдельного пользователя в Django?

    syschel
    @syschel
    freelance/python/django/backend
    Посмотри как джанго генерирует создание пользователя. Там функция на добавление пользователей, как раз и выводит только определённые поля.

    class UserAdmin(admin.ModelAdmin):
        fieldsets = (
            (None, {'fields': ('username', 'password')}),
            (_('Personal info'), {'fields': ('first_name', 'last_name', 'email')}),
            (_('Permissions'), {'fields': ('is_active', 'is_staff', 'is_superuser',
                                           'groups', 'user_permissions')}),
            (_('Important dates'), {'fields': ('last_login', 'date_joined')}),
        )
    
        add_fieldsets = (
            (None, {
                'classes': ('wide',),
                'fields': ('username', 'password1', 'password2'),
            }),
        )
        def get_fieldsets(self, request, obj=None):
            if not obj:
                return self.add_fieldsets
            return super(UserAdmin, self).get_fieldsets(request, obj)

    Если объект уже создан, то выводит стандартный набор из кортежа fieldsets.
    В общем, переопределяй get_fieldsets()
    Ответ написан
    1 комментарий
  • Как прописываются пути к django на серверах хостера?

    syschel
    @syschel
    freelance/python/django/backend
    Первая и главная ошибка в том, что сайты на Python и под фреймворком Django имеют свою специфику установки и запуска. Там нужен, по первости, очень большой бубен и много терпения. То что на хостинге прописали, это правила для HTML(голый) или PHP сайтов, которые в 98% используются "веб разработчиками". Вам нужно гуглить "установка Django на %ваш_хостинг%" или "Deploy django". Проще всего попросить хостера вам помочь, сразу сказав, что сайт на python`e, либо найти фрилансера на разовую услугу установки плюс составление инструкции пошаговой его действий.

    upd: разница между html(php) сайтами и python(django) в установки на веб хостинг в том, что первые обычно ограничиваются залитием файлов в строго указанную хостером папку, просто как набор файлов. А Django сайт устанавливается как программа, условно говоря "через инсталлятор" и по этому требует больше обычных прав пользователя, больше знаний оператору и наплевать на "папку на сервере".
    Ответ написан
    5 комментариев
  • Как получить категории, если в их потомках есть товар?

    syschel
    @syschel
    freelance/python/django/backend
    Один из вариантов, взять модель товаров, сгруппировать их по категориям = список категорий.
    С родителями эту уже строить деревья. Выше ты получаешь все категории у которых есть товары, дальше смотришь есть ли родитель и если есть то лезешь по дереву вверх (если структура изначально не древовидная, а глубина категорий больше 2х).
    Ответ написан
    2 комментария
  • Как можно формировать pdf документы на Django?

    syschel
    @syschel
    freelance/python/django/backend
    Мой пример функции генерации PDF на основании передачи html шаблона и контекста(данные из базы данных).
    xhtml2pdf
    from django.http import HttpResponse
    from django.template.loader import get_template
    from django.template import Context
    import cStringIO as StringIO
    import xhtml2pdf.pisa as pisa
    
    def render_to_pdf(template_src, context_dict, filename='contract.pdf'):
        """ Отдаю PDF файл """
        template = get_template(template_src)
        context = Context(context_dict)
        html = template.render(context)
        result = StringIO.StringIO()
        pdf = pisa.pisaDocument(
            StringIO.StringIO(html.encode('utf-8')),
            result,
            encoding='UTF-8',
            show_error_as_pdf=True
        )
        if not pdf.err:
            response = HttpResponse(result.getvalue(), content_type='application/pdf')
            response['Content-Disposition'] = 'attachment; filename=%s' % filename
            return response
        return HttpResponse(u'We had some errors!')
    
    def contract_text(request):
        text = ContractText.objects.filter(user=request.user)
        return render_to_pdf('pfd_template.html', {'text': text}, 'new_contract.pdf')
    Ответ написан
    Комментировать
  • Как избавиться от дублирования информации в django?

    syschel
    @syschel
    freelance/python/django/backend
    Если все книги подвязаны к сериям, а все серии уникальны (нет дублей). То нужно выводить именно серии. А уже в темплайте(шаблоне) подциклом выводить книги данной серии.
    Ответ написан
  • В какой директории может лежать проект на Django?

    syschel
    @syschel
    freelance/python/django/backend
    Да уж, советчики.

    Лежать может где угодно. Самый простой способ найти, посмотреть в конфигах апача или нджинкса (в зависимости от того, что используется). Конфиги открываются текстовым редактором. В одном из двух мест, найдёшь.

    апач лежит тут
    /etc/apache2/
    а нджинкс тут
    /etc/nginx/
    Смотришь конфиги, как увидишь упоминание домена, ищи строки с путями. Они и будут указывать туда где лежит сайт.
    Ответ написан
    2 комментария
  • Вопрос по запуску Django сайта на сервере?

    syschel
    @syschel
    freelance/python/django/backend
    leha78: Я обычно окружение конкретного проекта кладу рядом с проектом, но не в саму папку проекта
    - sites
     + project_name_one
        - env (тут окружение)
        - tmp
        - logs
        - source (тут весь код)
      + project_name_two
        - env (тут окружение)
        - tmp
        - logs
        - source (тут весь код)

    И в репозитарий и на вэб-сервер я переношу только папку source, хотя структуру и создаю однотипную. Окружение, логи, временные файлы создаю на сервере с нуля под каждый проект.
    Ответ написан
    Комментировать
  • Как добавить кастомное поле в админку Django?

    syschel
    @syschel
    freelance/python/django/backend
    ModelAdmin.list_display

    class CommentAdmin(admin.ModelAdmin):
        list_display = ('news__title')

    или своей функцией
    class CommentAdmin(admin.ModelAdmin):
        list_display = ('news_title_fnc')
    
        def news_title_fnc(self, obj):
            return obj.news.title
    Ответ написан
    2 комментария
  • Стоит ли создавать отдельные модели под отдельные категории товаров в Django?

    syschel
    @syschel
    freelance/python/django/backend
    Вы недавно в разработке. Ибо задача простая. Делайте сразу же масштабируемым магазин. Ибо завтра у вас добавится, ещё один тип товаров и вы полезете опять в код?
    Создаётся три модели:
    1. Категория
    2. Товар
    3. ХарактеристикиТовара

    Товар имеет связь с категорией через ForeignKey и связь с характеристиками через ManyToManyField.
    В итоге вы можете получить все товары выбранной категории и все характеристики товара(ов). В характеристиках заводите два поля "название" и "значение". Ну или разносите на две модели "название" и модель "значение". Во вторую ИД товара, ИД название и CharField значения. В итоге у вас может быть бесконечное количество "типов" товаров со своими персональными характеристиками.
    Ответ написан
    2 комментария
  • Как реализовать доступ к платному контенту в django?

    syschel
    @syschel
    freelance/python/django/backend
    1. Django
    2. Django
    3. Django + API платёжной системы.
    Ответ написан
    Комментировать
  • Как реализовать привязку модели User к постам?

    syschel
    @syschel
    freelance/python/django/backend
    1. У вас бы клавиатуру отобрать за заглавные буквы в именах переменных. Обязательно к прочтению pep8!
    2. Выполните миграцию
    python manage.py makemigrations
    python manage.py migrate

    3. Откуда взялась такая модель User у вас? Есть же базовая, с тем же названием, а у вас она не переопределена по правилам. Без проблем ловить ошибки на конфликтах имён.
    4.
    «Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте» © Стив Макконнелл
    Ответ написан
    5 комментариев
  • Почему выскакивает ошибка при ajax запросе?

    syschel
    @syschel
    freelance/python/django/backend
    Что бы после клика не было перехода, нужно сделать "ретурн фолс" у функции клика. Что бы не было ошибки, нужно узнать что это за ошибка, а для этого посмотреть что отдаёт сервер и что он получает, в этом вам поможет firebug в фаерфокс или аналоги в других браузерах.
    Ответ написан
    Комментировать
  • Как изменить внешний вид поля в админке в зависимости от содержания?

    syschel
    @syschel
    freelance/python/django/backend
    JavaScript ну или CSS если он научился отлавливать значение поля.
    А вообще, это лишнее, это админка джанги, а не админка сайта. Она создана для разработчиков, а не юзеров.
    Ответ написан
    4 комментария
  • Где искать актуальные django приложения?

    syschel
    @syschel
    freelance/python/django/backend
    Самое первое место: www.djangopackages.com
    Тут можно смотреть подборки по "тематике".
    К примеру ваш запрос про месседжеры: https://www.djangopackages.com/grids/g/messaging/

    Второе место это PyPi.
    Ответ написан
    1 комментарий
  • Что не так с моей функцией?

    syschel
    @syschel
    freelance/python/django/backend
    get_object_or_404() (source)
    Найти один объект, если не найден то показать 404
    У вас на поиске Heading, не находит его и выдаёт исключение (raise Http404), дальше не идёт выполнение кода. Так же будет ошибка если в базе найдётся больше одного объекта. Тоже выплюнет исключение в 404.
    Ответ написан
    2 комментария
  • Онлайн Сторы на Django. Стоит ли переписывать?

    syschel
    @syschel
    freelance/python/django/backend
    Стоит.
    Проблема для студий на питоне обычно только в одном ключе- поиск разработчиков. Пыхарей найти проще как правило, А если город региональный, то вообще порой засада. Но если не зацикливаться на присутствии в офисе разрабов, а нормально организовать работу "удалённого офиса", то проблем не будет.
    Ответ написан
    6 комментариев
  • Как сделать group_by по определённому полю в Django 1.8?

    syschel
    @syschel
    freelance/python/django/backend
    Django 1.8.4
    queryset.filter(**params).only('dates', 'type_date').select_related(*select_rel).order_by('-dates', '-create')
    queryset.values('dates').annotate(count=Count('dates')).order_by() # Сбросил сортировку


    Получаю запрос
    SELECT `dates`, COUNT(`dates`) AS `count` 
    FROM `gigdate_dateall` 
    WHERE (`dates` IN (2015-08-31, 2015-09-01, 2015-09-02, 2015-09-03) AND `type_date` = 0) 
    GROUP BY `dates` ORDER BY NULL


    Если .order_by() не делаю пустым. то тянет из настроек модели или других вышестоящих над запросом сортировок
    dates = models.DateField(_(u'Дата календаря'), blank=False)
    ...
    class Meta:
        ordering = ['-dates', '-create']

    И тогда группирует по двум полям.
    SELECT `dates`, COUNT(`dates`) AS `count` 
    FROM `gigdate_dateall` 
    WHERE (`dates` IN (2015-08-31, 2015-09-01, 2015-09-02, 2015-09-03) AND `type_date` = 0) 
    GROUP BY `dates`, `create` ORDER BY `dates` DESC, `create` DESC
    Ответ написан
  • Как сделать вход на сайт Django только после авторизации?

    syschel
    @syschel
    freelance/python/django/backend
    Принудительная авторизация:

    project/middleware.py
    from django.core.urlresolvers import reverse
    from django.http import HttpResponseRedirect
    
    class ValidLogin(object):
    
        def process_request(request):
            if not request.user.is_authenticated():
                return HttpResponseRedirect(reverse('signin'))
            return None


    project/settings.py
    MIDDLEWARE_CLASSES = (
        'project.middleware.ValidLogin',
    )


    А раздача прав уже или на уровне url`ов или на уровне вьюх.
    В урлах можно так

    from django.conf.urls import patterns, url
    from django.contrib.auth.decorators import user_passes_test
    urlpatterns = patterns('crm.views',
        url(r'^$', 
            user_passes_test(lambda u: u.is_superuser or u.is_moderator)(HomeCRM.as_view()),
            name='home'),
    )


    Если просто авторизацию через урлы, то так:
    from django.contrib.auth.decorators import login_required
    urlpatterns = patterns('crm.views',
        url(r'^$', 
            login_required(HomeCRM.as_view()),
            name='home'),
    )

    Но это каждую строку урла проверять на авторизацию... А потом ещё думать как реализовать права по грппам. Проще как выше, через middleware авторизацию проверять и слать на форму входа.
    Ответ написан
    3 комментария