Ответы пользователя по тегу Django
  • При создании через objects.create() вылетает IntegrityError. Как исправить?

    Выглядит странно. Есть ли в таблице Foo какие-то объекты? Что если удалить таблицу и создать снова? Какая СУБД?
    Ответ написан
  • Почему не работают статичные файлы в django?

    Коли приводите конфиг nginx - значит, статические файлы не работают в production, а не в родном django-сервере. Попробуйте добавить слэш в конец пути:

    location /static/ {
        alias /home/projects/testproject/static/;
    }


    Смутно помнится, что этот слэш имеет значение.

    P. S. Используйте, пожалуйста, тег code для оформления кода. Гораздо удобнее было бы читать.
    Ответ написан
  • Как настроить обновление записей в django по расписанию?

    Существует минимум два варианта.

    1. Создаёте management command, которая выполняет нужное действие. Пусть вы её назвали process. При запуске она должна запросом выбирать все модели, для которых уже наступило время выполнять bar(), и обрабатывает их. Затем настраиваете запуск этой команды в cron.
    2. Либо настраиваете Celery, который тоже умеет выполнять задания по расписанию.


    Выбор конкретного варианта зависит от особенностей проекта и ваших личных предпочтений. Если вам не нужно много фоновых задач и расписаний, хочется удобно запускать процедуру вручную из командной строки - то первый вариант проще.
    Ответ написан
    Комментировать
  • Как сделать кастомный list_display в админке django?

    По-моему, у вас одному экземпляру Library может соответствовать более одного экземпляра Book? Почему тогда написано "книга", а не "книги"?

    У всякого экземпляра Library есть свойство book_set, которое содержит список всех книг, соответствующих данному объекту. Можно переименовать его, указав related_name:

    material = models.ForeignKey(Library, related_name='books')


    Теперь вы можете вывести список книг так:

    class LibraryAdmin(admin.ModelAdmin):
        list_display = ('id', 'title', 'book_list', )
    
        def book_list(self, obj):
            return ', '.join(book.name for book in self.books)


    Или у вас одна библиотека соответствует только одной книге, и наоборот?
    Ответ написан
  • Как в django в ChangeForm отображать значения полей readonly?

    Не трогайте форму. Вы можете переопределить метод get_readonly_fields в admin-классе. Представляется, что это может выглядеть так:

    class CashPaymentAdmin(admin.ModelAdmin):
        # ...
        def get_readonly_fields(self, request, obj=None):
            if obj:
                return ['total', 'date', 'client', 'payment_id']
    Ответ написан
  • Каким образом направить определенный URL, на определенную директорию?

    В Django существует специальный class-based view для отдачи статических файлов во время разработки. Вот пример для Django 1.6.

    from django.conf.urls import patterns, include, url
    from django.conf import settings
    
    urlpatterns = patterns('',
        # Здесь ваши URL
    )
    
    # А это работает только с Django development server, чтобы не было соблазна
    # использовать в production
    if settings.DEBUG:
        urlpatterns += patterns('',
            url(r'^js/(?P<path>.*)$', 'django.views.static.serve', {
                'document_root': 'папка-где-лежат-файлы-js',
            }),
            url(r'^css/(?P<path>.*)$', 'django.views.static.serve', {
                'document_root': 'папка-где-лежат-файлы-css',
            }),
       )


    Как уже было отмечено, в production это использовать нельзя, работать будет очень и очень медленно. Конкретный способ настройки зависит от того, как вы вообще развёртываете Django. Если это делается под nginx, будет как-то так:

    Location /css/ {
        alias /var/www/css/;
    }


    Гуглите по директивам alias и root.
    Ответ написан
    Комментировать
  • Как в Django сделать AND фильтрацию на основе M2M связи?

    Не уверен в правильности, но может быть, попробовать вот так?

    Item.objects.filter(code__zip=1).filter(code__zip=2).filter(code__zip=3).filter(code__zip=4)


    По идее, это даст эффект операции AND.

    Если не сработает, существует ещё одно решение. Если не против, разобьём его составление на шаги, мне самому так проще писать.
    1. Делаем запрос на промежуточной таблице отношения ManyToMany, которая связывает Item и Code, выбирая те пары Item - Code, для которых item__zip входит в нужное множество.
    qs = Item.code.through.objects.filter(code__zip__in=[1, 2, 3, 4])


    2. В результирующем запросе значения item_id будут повторяться. Нам нужно найти те значения, для которых число строк равняется четырём.
    from django.db.models import Count
    qs = qs.values('item_id').annotate(count=Count('id')).order_by().filter(count=4)


    Надеюсь, что больших ошибок не допустил.
    Ответ написан
    6 комментариев
  • Django request в модели - как менять ссылку?

    Пожалуйста, опишите подробнее, зачем это вам нужно.

    Вероятно, в случае, если пользователь имеет флаг `is_stuff` установленным, он получает больше информации об объекте. Может быть, шаблон другой. И для этого для админов и для не-админов сделаны отдельные страницы с разными URL. Но зачем? Я бы сделал проще: пусть URL будет одним и тем же для всех, а уж конечная страница, точнее, её view, самостоятельно определяет на основании `request.user`, что делать, что пользователю показывать, с каким шаблоном.

    А иначе админы захотят расшарить ссылку на страницу где-нибудь, посторонний человек тыкнет - а там 403.
    Ответ написан
    Комментировать
  • Как правильно сохранять инлайн модель в админке, если id модели-родителя еще не сохраненно в бд?

    Столкнулся однажды с той же проблемой. Но из лени решил последовать принципу Sorl Thumbnail, который формирует пути так:

    /your_media_folder/b1/08/b108d1217ae0ec3d38c1e6c174c032ce.jpg


    Иными словами, каждая картинка получает в качестве имени случайный UUID и раскладывается по папкам из первых его символов. Получаем равномерную раскладку по папкам, что избавляет от беспокойства о возможном торможении файловой системы при большом количестве файлов в папке. Избавляемся от необходимости нормализовать имена файлов (а если символы кириллические в имени попадутся? все ли компоненты системы отнесутся к этому благосклонно?). Взамен же теряем соответствие между структурой файловой системы и структурой моделей Django. ПМСМ, это несущественно; может быть, у Вас ситуация иная и такой способ не подойдёт.

    Ответ написан
    6 комментариев