Задать вопрос
  • Как использовать django-modeltranslation за пределами админки?

    @nurzhannogerbek Автор вопроса
    Павел Аксенов, Со следующими настройками в БД создались поля title, title_en, title_de, body, body_en, body_de. Пытаюсь вывести поля в форму, но выдает странную ошибку. Как вы думаете, как можно исправить данную проблему?

    settings.py:
    LANGUAGE_CODE = 'ru'
    
    LANGUAGES = (
        ('ru', _('Russian')),
        ('en', _('English')),
        ('de', _('German')),
    )
    
    MODELTRANSLATION_LANGUAGES = ('en', 'de')


    forms.py:
    from modeltranslation.forms import TranslationModelForm
    
    class ArticleForm(TranslationModelForm):
        """
            Form based on "Article" model.
        """
    
        class Meta:
            model = Article
            fields = ('title', 'title_en', 'title_de', 'body', 'body_en', 'body_de',)
    
        def __init__(self, *args, **kwargs):
            super(ArticleForm, self).__init__(*args, **kwargs)
            self.fields['title'].widget.attrs = {
                'class': 'form-control',
                'id': 'title',
            }
            self.fields['title_en'].widget.attrs = {
                'class': 'form-control',
                'id': 'title_en',
            }
            self.fields['title_de'].widget.attrs = {
                'class': 'form-control',
                'id': 'title_de',
            }
            self.fields['body'].widget.attrs = {
                'class': 'form-control',
                'id': 'opt_head',
            }
            self.fields['body_en'].widget.attrs = {
                'class': 'form-control',
                'id': 'body_en',
            }
            self.fields['body_de'].widget.attrs = {
                'class': 'form-control',
                'id': 'body_de',
            }


    ERROR:
    Traceback (most recent call last):
      File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35\lib\site-packages\django\core\handlers\exception.py", line 39, in inner
        response = get_response(request)
      File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35\lib\site-packages\django\core\handlers\base.py", line 187, in _get_response
        response = self.process_exception_by_middleware(e, request)
      File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35\lib\site-packages\django\core\handlers\base.py", line 185, in _get_response
        response = wrapped_callback(request, *callback_args, **callback_kwargs)
      File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35\lib\site-packages\django\views\generic\base.py", line 68, in view
        return self.dispatch(request, *args, **kwargs)
      File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35\lib\site-packages\django\views\generic\base.py", line 88, in dispatch
        return handler(request, *args, **kwargs)
      File "C:\Users\Nurzhan\PycharmProjects\CA\slider\views.py", line 41, in get
        slide_create_form = SlideForm()
      File "C:\Users\Nurzhan\PycharmProjects\CA\slider\forms.py", line 29, in __init__
        'id': 'title_en',
    KeyError: 'title_en'
  • Как использовать django-modeltranslation за пределами админки?

    @nurzhannogerbek Автор вопроса
    Anton Kuzmichev: Как раз изучаю код приложения. Очень сложно понять с какого конца лучше подойти в изучении. Понимаю, что тема не совсем простая. Cпасибо конечно за совет, но хотелось бы услышать или увидеть какие-нибудь более конкретные напутсвия, подсказки, если это возможно =)
  • Как правильно использовать gettext в JS коде?

    @nurzhannogerbek Автор вопроса
    maxfox: Вроде в доках написано, что настроив url можно использовать gettext, ngettext, pgettext в JS. Саму настройку url делал по этому разделу.
  • Как поменять html шаблон для поля ImageField в форме редактирования?

    @nurzhannogerbek Автор вопроса
    Anton Kuzmichev: Здравствуйте! В вашей ссылке я заметил поле template_name. Cоздал свой собственный файл с названием clearable_file_input.html и поместил его в папку templates, но почему-то данный мой файл не видет. Выдает ошибку TemplateDoesNotExist. Не могу понять почему. Как думаете почему?

    widgets.py:
    class CustomClearableFileInput(ClearableFileInput):
        ***
        template_name = 'clearable_file_input.html'


    clearable_file_input.html:
    {% if widget.is_initial %}
    	<span>{{ widget.initial_text }}</span>: <a href="{{ widget.value.url }}">{{ widget.value }}</a>
    	{% if not widget.required %}
    		<input type="checkbox" name="{{ widget.checkbox_name }}" id="{{ widget.checkbox_id }}"/>
    		<label for="{{ widget.checkbox_id }}">{{ widget.clear_checkbox_label }}</label>
    	{% endif %}
    	<br/>
    	<span>{{ widget.input_text }}</span>:
    {% endif %}
    <input type="{{ widget.type }}" name="{{ widget.name }}"{% include "django/forms/widgets/attrs.html" %}/>


    ERROR:
    Traceback (most recent call last):
      File "/srv/envs/Project/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
        response = get_response(request)
      File "/srv/envs/Project/lib/python3.6/site-packages/django/core/handlers/base.py", line 187, in _get_response
        response = self.process_exception_by_middleware(e, request)
      File "/srv/envs/Project/lib/python3.6/site-packages/django/core/handlers/base.py", line 185, in _get_response
        response = wrapped_callback(request, *callback_args, **callback_kwargs)
      File "/srv/envs/Project/lib/python3.6/site-packages/django/views/generic/base.py", line 68, in view
        return self.dispatch(request, *args, **kwargs)
      File "/srv/envs/Project/lib/python3.6/site-packages/django/views/generic/base.py", line 88, in dispatch
        return handler(request, *args, **kwargs)
      File "/home/nurzhan/CA/article/views.py", line 106, in get
        request=request
      File "/srv/envs/Project/lib/python3.6/site-packages/django/template/loader.py", line 68, in render_to_string
        return template.render(context, request)
      File "/srv/envs/Project/lib/python3.6/site-packages/django/template/backends/django.py", line 68, in render
        reraise(exc, self.backend)
      File "/srv/envs/Project/lib/python3.6/site-packages/django/template/backends/django.py", line 89, in reraise
        six.reraise(exc.__class__, new, sys.exc_info()[2])
      File "/srv/envs/Project/lib/python3.6/site-packages/django/utils/six.py", line 685, in reraise
        raise value.with_traceback(tb)
      File "/srv/envs/Project/lib/python3.6/site-packages/django/template/backends/django.py", line 66, in render
        return self.template.render(context)
      File "/srv/envs/Project/lib/python3.6/site-packages/django/template/base.py", line 207, in render
        return self._render(context)
      File "/srv/envs/Project/lib/python3.6/site-packages/django/template/base.py", line 199, in _render
        return self.nodelist.render(context)
      File "/srv/envs/Project/lib/python3.6/site-packages/django/template/base.py", line 993, in render
        bits.append(force_text(bit))
      File "/srv/envs/Project/lib/python3.6/site-packages/django/utils/encoding.py", line 76, in force_text
        s = six.text_type(s)
      File "/srv/envs/Project/lib/python3.6/site-packages/django/utils/html.py", line 385, in <lambda>
        klass.__str__ = lambda self: mark_safe(klass_str(self))
      File "/srv/envs/Project/lib/python3.6/site-packages/django/forms/boundfield.py", line 41, in __str__
        return self.as_widget()
      File "/srv/envs/Project/lib/python3.6/site-packages/django/forms/boundfield.py", line 120, in as_widget
        **kwargs
      File "/srv/envs/Project/lib/python3.6/site-packages/django/forms/widgets.py", line 221, in render
        return self._render(self.template_name, context, renderer)
      File "/srv/envs/Project/lib/python3.6/site-packages/django/forms/widgets.py", line 226, in _render
        return mark_safe(renderer.render(template_name, context))
      File "/srv/envs/Project/lib/python3.6/site-packages/django/forms/renderers.py", line 31, in render
        template = self.get_template(template_name)
      File "/srv/envs/Project/lib/python3.6/site-packages/django/forms/renderers.py", line 37, in get_template
        return self.engine.get_template(template_name)
      File "/srv/envs/Project/lib/python3.6/site-packages/django/template/backends/django.py", line 41, in get_template
        reraise(exc, self)
      File "/srv/envs/Project/lib/python3.6/site-packages/django/template/backends/django.py", line 89, in reraise
        six.reraise(exc.__class__, new, sys.exc_info()[2])
      File "/srv/envs/kaseAdmPy362/lib/python3.6/site-packages/django/utils/six.py", line 685, in reraise
        raise value.with_traceback(tb)
      File "/srv/envs/kaseAdmPy362/lib/python3.6/site-packages/django/template/backends/django.py", line 39, in get_template
        return Template(self.engine.get_template(template_name), self)
      File "/srv/envs/kaseAdmPy362/lib/python3.6/site-packages/django/template/engine.py", line 162, in get_template
        template, origin = self.find_template(template_name)
      File "/srv/envs/kaseAdmPy362/lib/python3.6/site-packages/django/template/engine.py", line 148, in find_template
        raise TemplateDoesNotExist(name, tried=tried)
    django.template.exceptions.TemplateDoesNotExist: clearable_file_input.html
    [24/Aug/2017 11:02:30] "GET /administration/article/47/edit/ HTTP/1.1" 500 25476
  • Как осуществить сортировку списка перетаскиванием в Джанго?

    @nurzhannogerbek Автор вопроса
    Ильяс: Я кратко просмотрел данную библиотеку и мне кажется ее можно использовать только в админке. Хотя могу ошибаться. Ее можно использовать за приделами админки?
  • Как осуществить сортировку списка перетаскиванием в Джанго?

    @nurzhannogerbek Автор вопроса
    Здравствуйте! Я вот тоже заметил это событие update и начал писать так (см. ниже), но не пойму как передать url в ajax и не совсем понимаю как должна выглядеть вьюха. Можете пожалуйста взглянуть и сказать куда дальше копать или вообще не правильно делаю. Хотелось бы узнать ваше мнение.

    urls.py:
    url(r'^book/(?P<pk>\d+)/sorting/$',
         BookSortingView.as_view(),
         name='book_sorting')


    JS:
    $("#books").sortable({
          update: function(event, ui) {
                var information = $('#books').sortable('serialize');
                $.ajax({
                      url: "???",
                      type: "post",
                      data: information
                });
          },
    }).disableSelection();


    views.py:
    class BookSortingView(View):
        @method_decorator(csrf_exempt)
        def dispatch(self, request, *args, **kwargs):
            return super(BookSortingView, self).dispatch(request, *args, **kwargs)
    
        def post(self, request, pk, *args, **kwargs):
            for index, pk in enumerate(request.POST.getlist('book[]')):
                book = get_object_or_404(Book, pk=pk)
                book.position = index
                book.save()
            return HttpResponse()
  • Как осуществить сортировку списка перетаскиванием в Джанго?

    @nurzhannogerbek Автор вопроса
    Здравствуйте! Не хотелось бы вдоваться во все подробности. Ваше идея отчасти правильная, но в моем конкртном проекте этого не нужно делать. Нужно как раз чтобы отсортированный одним пользователем список, был доступен другому. Есть ли у вас идеи по этому поводу?
  • Как правильно переписать FBV на CBV в Django?

    @nurzhannogerbek Автор вопроса
    Anton Kuzmichev: Здравствуйте Антон! Смотря на ваш пример я вроде перевел свою FBV на CBV. Можете пожалуйста взглянуть, сравнить их и сказать свой вердикт?!

    views.py:
    class BookDeleteView(View):
        def post(self, request, pk, *args, **kwargs):
            data = dict()
            book = Book.objects.get(pk=pk)
            book.delete()
            data['form_is_valid'] = True
            context = {
                'books': Book.objects.all()
            }
            data['html_books'] = render_to_string(
                'books.html',
                context
            )
            return JsonResponse(data)
    
        def get(self, request, pk, *args, **kwargs):
            data = dict()
            book = Book.objects.get(pk=pk)
            context = {
                'book': book
            }
            data['html_book_delete_form'] = render_to_string(
                'delete_book.html',
                context,
                request=request,
            )
            return JsonResponse(data)
  • Как правильно переписать FBV на CBV в Django?

    @nurzhannogerbek Автор вопроса
    Павел Аксенов: Здравствуйте, Павел! Пробовал, что-то на подобии нашего примера, только наследовал класс DeleteView. В целом работает, но есть маленькие проблемы в JS коде. Получается у меня у каждого объекта есть кнопка "Удалить". При нажатии на нее открывается модальное окно с подтверждением на удаление. Проблема у меня в том, что открывается модальное окно только первого объекта. Как решить данную проблему. В шаблоне я могу указать {{ forloop.counter }} в id элемента и сделать объект уникальным, но что писать в таком случаи в JS код. Скинул пример свой, можете взглянуть и сказать, что не так?

    views.py:
    class BookDeleteView(DeleteView):
        model = Book
        slug_field = 'pk'
        success_url = reverse_lazy('book_list')


    html:
    {% for book in books %}
    <a id="bookDeleteBtn-{{ forloop.counter }}" class="btn btn-primary">Удалить</a>
    
    <div id="bookDeleteModalBox-{{ forloop.counter }}" class="modal fade">
           Содержимое модального окна
    </div>
    {% endfor %}


    JS:
    $("#bookDeleteBtn-???").click(function () {
           $.ajax({
    		beforeSend: function () {
    			$("#bookDeleteModalBox-???").modal("show");
    		},
    	});
    });
  • Как обновить страницу через AJAX в DJANGO?

    @nurzhannogerbek Автор вопроса
    tema_sun: Вопрос решон. Все из-за моей невнимательности. В JS коде вместо класса указал id из за чего просто возвращал сырой джейсон. Сейчас страницу обновляет. Но у меня все равно есть маленький вопрос. После успешной отправки как очистить форму? Просто при повторном открытии модального окна в форме стоят предыдущие записи. Нужно в параметр success добавить что-то наподобии form[0].reset();?
  • Как обновить страницу через AJAX в DJANGO?

    @nurzhannogerbek Автор вопроса
    tema_sun: так же заметил что хоть и был успешный submit данные не сохраняются. Вообще запутался. =(

    Пробовал так тоже, не помогли. Что можете посоветовать?
    if book_create_form.is_valid():
       new_book = book_create_form.save(commit=False)
       new_book.save()
  • Как обновить страницу через AJAX в DJANGO?

    @nurzhannogerbek Автор вопроса
    Нашел свои ошибки в коде. Вот эти строки должны выглядеть так:
    data['html_book_create_form'] = render_to_string('create_book.html', context)

    и
    data['html_book_create_form'] = render_to_string('create_book.html', context, request=request)


    Проблема теперь в том что после успешного submit в браузере появляется JSON, а не обновляется страница. Что делаю не так?
  • Как обновить страницу через AJAX в DJANGO?

    @nurzhannogerbek Автор вопроса
    tema_sun: Изменил JS код немного и модальное окно открывается корректно теперь. Проблема во вьюхе. Выдает след. ошибку (см. ниже), после того как наживаю submit. Что можете посоветовать? Во вьюхе есть запись request, на которую ругается редактор.

    JS:
    $(function () {
    	$("#bookCreateBtn").click(function () {
    		$.ajax({
    			beforeSend: function () {
    				$("#bookCreateModalBox").modal("show");
    			},
    		});
    	});
    });


    ERROR:
    Traceback (most recent call last):
      File "/srv/envs/kaseAdmPy362/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
        response = get_response(request)
      File "/srv/envs/kaseAdmPy362/lib/python3.6/site-packages/django/core/handlers/base.py", line 187, in _get_response
        response = self.process_exception_by_middleware(e, request)
      File "/srv/envs/kaseAdmPy362/lib/python3.6/site-packages/django/core/handlers/base.py", line 185, in _get_response
        response = wrapped_callback(request, *callback_args, **callback_kwargs)
      File "/srv/envs/kaseAdmPy362/lib/python3.6/site-packages/django/views/generic/base.py", line 68, in view
        return self.dispatch(request, *args, **kwargs)
      File "/srv/envs/kaseAdmPy362/lib/python3.6/site-packages/django/views/generic/base.py", line 88, in dispatch
        return handler(request, *args, **kwargs)
      File ".../views.py", line 26, in post
        request
    TypeError: unhashable type: 'dict'
  • Как обновить страницу через AJAX в DJANGO?

    @nurzhannogerbek Автор вопроса
    Здравствуйте! На основе нашего примера составил вьюху с мелкими изменениями, но вот не совсем уверен в правильности AJAX запроса. Можете проверить пожалуйста и сказать свое мнение.

    urls.py:
    url(r'^book/create/$', BookCreateView.as_view(), name='book_create'),


    views.py:
    class BookCreateView(View):
        def post(self, request):
            data = dict()
            book_create_form = BookCreateForm(request.POST)
            if book_create_form.is_valid():
                book_create_form.save()
                data['form_is_valid'] = True
                books= Book.objects.all()
                data['html_books'] = render_to_string('books.html', {
                    'books': books
                })
            else:
                data['form_is_valid'] = False
            context = {'books': books}
            data['html_create_book_form'] = render_to_string('create_book.html', {
                context,
                request
            })
            return JsonResponse(data)
    
        def get(self, request):
            data = dict()
            book_create_form = BookCreateForm()
            context = {'book_create_form': book_create_form}
            data['html_create_book_form'] = render_to_string('create_book.html', {
                context,
                request
            })
            return JsonResponse(data)


    dashboard.html:
    <div id="books">
           {% include 'books.html' %}
    </div>
    
    <a id="bookCreateBtn" href="#bookCreateModalBox" class="btn btn-primary" data-toggle="modal">Добавить новую книгу</a>
    
    <div id="bookCreateModalBox" class="modal fade">
           <div class="modal-dialog">
                  <div class="modal-content">
    	             <form method="post" action="{% url 'book_create' %}" class='bookCreateForm'>
    		            {% csrf_token %}
    		            <div class="modal-body">
    			           {{ create_book_form }}
    			    </div>
    			    <div class="modal-footer">
    			           <button type="submit" class="btn btn-primary">Создать</button>
    			    </div>
    	             </form>
                  </div>
           </div>
    </div>


    JavaScript code:
    $(document).ready(function(){
    	$("#bookCreateBtn").click(function() {
    		$("#bookCreateModalBox").modal('show');
    	});
    });
    
    $("#bookCreateModalBox").on("submit", "#bookCreateForm", function () {
    	var form = $(this);
    	$.ajax({
    		url: form.attr("action"),
    		data: form.serialize(),
    		type: form.attr("method"),
    		dataType: 'json',
    		success: function (data) {
    			if (data.form_is_valid) {
    				$("#books").html(data.html_books);
    			}
    			else {
    				$("#bookCreateModalBox .modal-body").html(data.html_create_book_form);
    			}
    		}
    	});
    	return false;
    });
  • Как обновить страницу через AJAX в DJANGO?

    @nurzhannogerbek Автор вопроса
    Можете привести маленький пример пожалуйста, если вам не трудно.
  • Как реализовать перетаскивание элементов в слайдере?

    @nurzhannogerbek Автор вопроса
    Сергей Горностаев: Здравствуйте! Можете пожалуйста показать какой-нибудь простой пример для наглядности. Пытаюсь разобраться, но не получается переварить все в голове. Как на ваш взгляд лучше реализовать сам слайдер похожий по поведении на тот который на сайте djangopackages? (Передвигается на одну позицию, что-то на подобии lazy loading) У меня получается, как при пагинации, что не совсем правильно. Что бы вы могли посоветовать?
  • Как перенаправить неавторизованного пользователя на определенную страницу?

    @nurzhannogerbek Автор вопроса
    Сергей Горностаев: Cпасибо за ссылку, Сергей. Всеже не могу понять куда ставить параметр login_url декоратора login_required. Данный параметр должен стоять после СVB?

    urlpatterns = [
        url(r'^admin/$', login_required(DashboardView.as_view(), login_url='/admin/login/')),
    ]
  • Как перенаправить неавторизованного пользователя на определенную страницу?

    @nurzhannogerbek Автор вопроса
    Здравствуйте, Сергей! Тоже изначално думал о декораторе @login_required, но если не ошибаюсь его можно испрользовать только для FBV. У меня же вьюхи CBV. В примере выше адрес /admin/ запускает СBV DashboardView. Возможно я ошибаюсь, поправьте меня если что.

    Что насчет LOGIN_URL. У меня есть две разные страницы для авторизации. Одна для обычных пользователей. Там я как раз испрользую LOGIN_URL в настройках. В моем же вопросе я для админа создал отдельную страницу авторизации. Думаю нужно что-то на подобии ADMIN_LOGIN_URL. Что думаете на счет этого?
  • Как настроить Apache для запуска Джанго проекта?

    @nurzhannogerbek Автор вопроса
    sim3x: Почитал, в целом делал тоже самое, что и автор в этой статье. В логах заметил такую запись:
    httpd.exe: Syntax error on line 171 of C:/Program Files/Apache2.4/conf/httpd.conf: Cannot load C:/Program Files/Apache2.4/modules/mod_wsgi.so into server: \xcd\xe5 \xed\xe0\xe9\xe4\xe5\xed \xf3\xea\xe0\xe7\xe0\xed\xed\xfb\xe9 \xec\xee\xe4\xf3\xeb\xfc.
    .

    На 171 линии в файле httpd.conf стоит LoadModule wsgi_module modules/mod_wsgi.so. Как раз после добавления этой записи, Apache перестал запускаться. mog_wsgi скачивал из этого сайта www.lfd.uci.edu/~gohlke/pythonlibs/#mod_wsgi

    Пробовал использовать обе, ошибка одинаковая в обоих (Возможно где-то здесь совершил ошибку?):
    1) mod_wsgi‑4.5.15+ap24vc14‑cp35‑cp35m‑win_amd64.whl -> взял документ mod_wsgi.cp35-win_amd64.pyd из архива ->переименовал файл на mog_wsgi.so -> перенес файл в папку modules в Apache.
    2) mod_wsgi‑4.5.15+ap24vc14‑cp35‑cp35m‑win32.whl -> взял документ mod_wsgi.cp35-win32 из архива-> переименовал файл на mog_wsgi.so -> перенес файл в папку modules в Apache.
  • Как настроить Apache для запуска Джанго проекта?

    @nurzhannogerbek Автор вопроса
    sim3x: Я опять таки с вами полностью соглашусь, Django идет чаще всего в связке с nginx. Задавая этот вопрос был уверен, что кто-нибудь напишет подобное. Научный руководитель требовал поставить именно на Apache, так как он стоит на серверах университета. Приходится работать с тем, что есть. Стоит там кстати древний Windows XP. Вожусь уже второй день. Проблема возникла после добавления записей в файл httpd.conf.