Ответы пользователя по тегу Django
  • Как изменить value поля в форме?

    fox_12
    @fox_12 Куратор тега Django
    Расставляю биты, управляю заряженными частицами
    Как-то странно вы json грузите. Для начала попробуйте сделать это правильно:
    import json
    .....
    self.fields['oem_list'].initial = json.dumps(ваше поле с json).replace('"','')[1:-1]
    .....
    data = json.loads(self.cleaned_data['oem_list'])
    Ответ написан
    Комментировать
  • Как откатить makemigrations в django?

    fox_12
    @fox_12 Куратор тега Django
    Расставляю биты, управляю заряженными частицами
    Просто удалите файл данной миграции если она еще не применена. Исправьте и выполните makemigrations еще раз.
    По manage.py show migrations можно глянуть примененные и непримененные миграции.
    Указав номер, можно откатиться на предыдущую миграцию
    manage.py migrate <модель> <номер миграции>
    Ответ написан
    Комментировать
  • Не работает migrate в Django 1.8.6?

    fox_12
    @fox_12 Куратор тега Django
    Расставляю биты, управляю заряженными частицами
    У вас же миграция 0007_alter_validators_add_error_messages отсутствует, которая прописана в зависимостях у 0008_user_following

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

    fox_12
    @fox_12 Куратор тега Django
    Расставляю биты, управляю заряженными частицами
    Как-то так:

    В admin.py:
    from forms import ВашаФорма
    
    @admin.register(ВашаМодель)
    class ВашаМодельAdmin(admin.Modeladmin):
        form = ВашаФорма


    в forms.py
    class ВашаФорма(forms.ModelForm):
        ваше_поле = forms.КакойтоСтандартныйФорматПоля()
    
        def save(self, commit=True):
             instance = super(ВашаМодель, self).save(commit=False)
             # ...тут определяем что делаем с полем при сохранении..
             #  оно в self.cleaned_data['ваше_поле']
             if commit:
                    instance.save()
             return instance
    
        class Meta:
            model = ВашаМодель
            fields = ('ваше_поле', 'какие-то другие поля которые нужно выводить')
    Ответ написан
    2 комментария
  • Как сделать поиск на джанго?

    fox_12
    @fox_12 Куратор тега Django
    Расставляю биты, управляю заряженными частицами
    Ответ написан
    Комментировать
  • Как правильно вложить изображения при отправке письма по электронной почте?

    fox_12
    @fox_12 Куратор тега Django
    Расставляю биты, управляю заряженными частицами
    Как вариант - перекодируйте в base64, и вставляйте прямо в тело письма:
    import base64
    ...
    my_image = '<img src="data:image/jpg;base64,{im}" />'.format(im=base64.b64encode(instance.image.read()))
    ...
    mail_html = """
            <html>
                <head></head>
                <body>
                    <h4>Заголовок письма</h4>
                    {img}
                    ....
                </body>
            </html>
            """.format(img=my_image)

    Далее кодируете текст письма в MIME и отправляете.
    Ответ написан
    8 комментариев
  • В каком файле отдается контент шаблону?

    fox_12
    @fox_12 Куратор тега Django
    Расставляю биты, управляю заряженными частицами
    Ну конкретно на данной форме это отдается в django/contrib/admin/templates/index.html
    Конкретно в этом месте:
    ... 
    {# тут пробегаемся по вашим приложениям и расставляем ссылки на админки #}
    {% block content %}
    <div id="content-main">
    {% if app_list %}
        {% for app in app_list %}
           .....
        {% endfor %}
    {% else %}
        <p>{% trans "You don't have permission to edit anything." %}</p>
    {% endif %}
    </div>
    {% endblock %}
    ....

    При переходе на приложение вызывается

    django/contrib/admin/templates/app_index.html (содержимое index.html наследуется. Только в apps_list теперь конкретно ваше приложение)

    При переходе на список объектов вызывается шаблон
    django/contrib/admin/templates/change_list.html
    который наследует в свою очередь base_site.html, а тот - наследует base.html)

    При переходе к конкретному объекту вызывается шаблон
    django/contrib/admin/templates/change_form.html
    который также наследует base_site.html

    Вот во всех перечисленных шаблонах и внедряйте свои элементы
    Ответ написан
    Комментировать
  • Как в django CVB ListView вывести данные из другой модели?

    fox_12
    @fox_12 Куратор тега Django
    Расставляю биты, управляю заряженными частицами
    Контекст в шаблон передаете?
    Так нужный контекст уже и так в шаблон улетает:

    {% for obj in objects_list %}
       {% for img in obj.modela_set.all %}
          {{ img }}
       {% endfor %}
    {% endfor %}


    Если это нужно делать именно во вьюхе - получайте список объектов в get_queryset(), и там добавляйте какие угодно поля.
    Ответ написан
    Комментировать
  • Как подключать стили (css) приложений в шаблон django?

    fox_12
    @fox_12 Куратор тега Django
    Расставляю биты, управляю заряженными частицами
    Во вьюхе класс Media:
    ....
        class Media:
            js = ('js/my.js', )
            css = {'all': ('css/settings_styles.css', )}


    либо как процедура (если используем условия например) - пример из кастомизации админки с использованием мелких вставок стилей прямо в шаблон, для обычных вьюх - суть та же:

    import embedded_media as emb
    
    @admin.register(MyModel)
    class MyModelAdmin(ReadOnlyAdmin):
        ...
        @property
        def media(self):
            media = super(MyModelAdmin, self).media
            js = (
                '/admin/jsi18n/',
                '/static/admin/js/calendar.js',
                '/static/admin/js/admin/DateTimeShortcuts.js' )
            if self.read_only:
                css = { 'all': (emb.CSS('.save-box { display: none; }'),) }
                media.add_css(css)
            media.add_js(js)
            return media

    Ну и в шаблонах можно подключать само собой, либо используя templatetags например
    Ответ написан
    Комментировать
  • Как устранить ошибку ImportError: No module named billboard.models?

    fox_12
    @fox_12 Куратор тега Django
    Расставляю биты, управляю заряженными частицами
    __init__.py есть в директории с billboard ?
    Ответ написан
  • Django несколько media root?

    fox_12
    @fox_12 Куратор тега Django
    Расставляю биты, управляю заряженными частицами
    Это можно решить например написанием собственного FileStorage
    https://docs.djangoproject.com/en/dev/topics/files/

    Примерно как-то так:
    import os
    from django.conf import settings
    from django.db import models
    from django.core.files.storage import FileSystemStorage
    
    my_storage = FileSystemStorage(location=os.path.join(settings.BASE_DIR, 'image'))
    
    class My_model(models.Model):
        file1 = models.FileField()                       # дефолтный MEDIA_ROOT
        image = models.FileField(storage=my_storage)     # пользовательский путь хранения
    Ответ написан
    Комментировать
  • Отправка графика через send_mass_mail()?

    fox_12
    @fox_12 Куратор тега Django
    Расставляю биты, управляю заряженными частицами
    Как уже было указано выше, - на той стороне график, который вы рендерите с помощью javascript, не увидят, потому что javascript отключен.
    Поэтому генерируйте картинку в png или jpeg, - в сети есть примеры как это сделать на phantomjs, и отсылайте в качестве аттачей.
    Ответ написан
    Комментировать
  • Как правильно сделать связь manytomany?

    fox_12
    @fox_12 Куратор тега Django
    Расставляю биты, управляю заряженными частицами
    К примеру добавить модель Recipe

    class Recipe(models.Model):
        ingridient = models.ForeignKey(Ingridient)
        quantity = models.DecimalField(...)


    Тогда Pizza

    class Pizza(models.Model):
        pizza_name = models.CharField(u'Название пиццы', max_length=255)
        component = models.ManyToManyField(Recipe)
    Ответ написан
  • Как запустить django сайт на локальном компьютере под Mac OS X?

    fox_12
    @fox_12 Куратор тега Django
    Расставляю биты, управляю заряженными частицами
    Процесс запуска отлично описан в документации Django. Начните хотя бы с туториала:
    https://docs.djangoproject.com/en/1.9/intro/tutorial01/
    Процесс запуска под Mac OS X никаких кардинальных отличий не имеет.
    Ответ написан
    Комментировать
  • Как отобразить DetailView в Django?

    fox_12
    @fox_12 Куратор тега Django
    Расставляю биты, управляю заряженными частицами
    Что-то сильно сложно вы накрутили...
    Помимо описания модели, в urls.py нужно прописать что-то вроде:

    from .views import PatientDetailView
    ...
        url(r'patient/(?P<pk>\d+)/', PatientDetailView.as_view(), name='patient_detail'),
    ...


    в views.py
    from django.views.generic import DetailView
    from models import Patient
    
    class PatientDetailView(DetailView):
        model = Patient

    И все... - экземпляр вашей модели с pk=1 при входе на /patient/1/ будет улетать в контекст темплейта patient_detail.html в виде переменной object

    А можно еще проще, просто прописав в urls.py:

    from django.views.generic import DetailView
    from .models import Patient
    
    urlpatterns = [
        ...
        url(r'patient/(?P<pk>\d+)/', DetailView.as_view(model=Patient), name='patient_detail'),
    ]

    А конкретно у вас ошибка из-за того, что вы используете id в url вместо pk
    Ответ написан
    Комментировать
  • Как правильно переопределить метод save()?

    fox_12
    @fox_12 Куратор тега Django
    Расставляю биты, управляю заряженными частицами
    class Post (models.Model):
        published_date = models.DateTimeField(blank=True, null=True, verbose_name='Дата публикации')
        public = models.BooleanField(default=False, verbose_name='Опубликовано?')
    
        def save(self, *args, **kwargs):
            if self.public:
                 self.published_date = timezone.now()
            else:
                 self.published_date = None
            super(Post, self).save(*args, **kwargs)
    Ответ написан
  • Как решить проблему с отправкой письма в django на продакшене?

    fox_12
    @fox_12 Куратор тега Django
    Расставляю биты, управляю заряженными частицами
    А зачем на продакшене вы печатаете на консоль?
    Выводите в лог хотя бы.
    Закомментируйте или удалите строки с  print - ошибка исчезнет.
    Ответ написан
    5 комментариев
  • Как в django передать ид объекта его же полю в админке?

    fox_12
    @fox_12 Куратор тега Django
    Расставляю биты, управляю заряженными частицами
    Попробуйте передать id через виджет формы при инициализации

    admin.py

    from forms import PageForm
    
    @admin.register(Page)
    class PageAdmin(admin.ModelAdmin)
         form = PageForm
         model = Page


    forms.py

    class PageForm(forms.ModelForm)
         def __init__(self, *args, **kwargs):
              super(PageForm, self).__init__(*args, **kwargs)
              if self.instance:
                    self.fields['content'].widget=RichTextUploadingField( verbose_name="Текст", page_id=self.instance.id )
    ...
    Ответ написан
  • Как задать порядок вывода objects.all() в django?

    fox_12
    @fox_12 Куратор тега Django
    Расставляю биты, управляю заряженными частицами
    Как вариант - порядок сортировки по умолчанию можно задать в самой модели

    class Step(models.Model):
    ...
        class Meta:
            ordering = ['id']


    Тогда везде - в том числе при выводе в админке и пр., будет задаваться порядок сортировки по умолчанию по id
    Ответ написан
    Комментировать
  • Как в django разделить двадцать постов в блоге на две страницы?

    fox_12
    @fox_12 Куратор тега Django
    Расставляю биты, управляю заряженными частицами
    Использовать Pagination и Common based views.
    Например так:

    Указать в views.py:
    ...
    from django.views.generic import ListView
    ...
    class RecordsListView(ListView):
        template_name = 'record_list_view.html'
        model = Record
        paginate_by = 10


    и в темплейте 'record_list_view.html что-то вроде:
    ...
    {% for record in object_list %}
    
        ...
    {% endfor %}
    
        {% if is_paginated %}
            <div class="row">
                <div class="col-sm-4">
                    <div class="dataTables_info" id="dynamic-table_info" role="status" aria-live="polite">
                        Показано с {{ page_obj.start_index }} по {{ page_obj.end_index }} из {{ page_obj.paginator.count }} результатов
                    </div>
                </div>
                <div class="col-sm-2">
                    <div class="dataTables_paginate paging_simple_numbers" id="dynamic-table_paginate">
                        <ul class="pagination">
    
                            {% if page_obj.has_previous %}
                            <li class="paginate_button previous" aria-controls="dynamic-table" tabindex="0">
                                <a href="{% url 'recordt_list'%}?page={{ page_obj.previous_page_number }}{{ search_data|set_search_data }}">Пред.</a>
                            </li>
                            {% else %}
                            <li class="paginate_button disabled previous" aria-controls="dynamic-table" tabindex="0">
                                <a href="{% url 'ticket_list'%}">Пред.</a>
                            </li>
                            {% endif %}
    
                            <li class="paginate_button active" aria-controls="dynamic-table" tabindex="0">
                                <a href="{% url record_list'%}?page={{page_obj.number}}{{ search_data|set_search_data }}">{{ page_obj.number }}</a>
                            </li>
    
                            {% if page_obj.has_next %}
                            <li class="paginate_button next" aria-controls="dynamic-table" tabindex="0">
                                <a href="{% url 'rtecord_list'%}?page={{ page_obj.next_page_number }}{{ search_data|set_search_data }}">След.</a>
                            </li>
                            {% else %}
                            <li class="paginate_button next disabled" aria-controls="dynamic-table" tabindex="0">
                                <a href="{% url 'record_list'%}?page={{ page_obj.paginator.num_pages }}">След.</a>
                            </li>
                            {% endif %}
    
                        </ul>
                    </div>
                </div>
            </div>
        {% endif %}
    ...
    Ответ написан
    1 комментарий