Задать вопрос
  • Как объединить приложения django-modeltranslation и django-reversion?

    @nurzhannogerbek Автор вопроса
    Павел Аксенов, нашел статью, которая решила проблему с ошибкой:
    django.db.utils.DatabaseError: ORA-03124: two-task internal error
  • Как объединить приложения django-modeltranslation и django-reversion?

    @nurzhannogerbek Автор вопроса
    Павел Аксенов,
    1 . Попробовал удалить таблицу slider из БД, затем применил команду:
    python manage.py migrate --fake slider zero.
    2.Удалил файл 0001_initial.py.
    3. После этого заново провел команды миграции:
    - makemigrations (снова создался файл 0001_initial.py без проблем)
    - migrate (в БД создалась таблица slider)
    При команде migrate в консоли были такие сообщения:
    Applying slider.0001_initial... 
       OK
       Traceback (most recent call last):
      File "manage.py", line 22, in <module>
        execute_from_command_line(sys.argv)
      File "/Users/nurzhan_nogerbek/Virtualenvs/py2714/lib/python2.7/site-packages/django/core/management/__init__.py", line 364, in execute_from_command_line
        utility.execute()
      File "/Users/nurzhan_nogerbek/Virtualenvs/py2714/lib/python2.7/site-packages/django/core/management/__init__.py", line 356, in execute
        self.fetch_command(subcommand).run_from_argv(self.argv)
      File "/Users/nurzhan_nogerbek/Virtualenvs/py2714/lib/python2.7/site-packages/django/core/management/base.py", line 283, in run_from_argv
        self.execute(*args, **cmd_options)
      File "/Users/nurzhan_nogerbek/Virtualenvs/py2714/lib/python2.7/site-packages/django/core/management/base.py", line 330, in execute
        output = self.handle(*args, **options)
      File "/Users/nurzhan_nogerbek/Virtualenvs/py2714/lib/python2.7/site-packages/django/core/management/commands/migrate.py", line 227, in handle
        self.verbosity, self.interactive, connection.alias, apps=post_migrate_apps, plan=plan,
      File "/Users/nurzhan_nogerbek/Virtualenvs/py2714/lib/python2.7/site-packages/django/core/management/sql.py", line 53, in emit_post_migrate_signal
        **kwargs
      File "/Users/nurzhan_nogerbek/Virtualenvs/py2714/lib/python2.7/site-packages/django/dispatch/dispatcher.py", line 193, in send
        for receiver in self._live_receivers(sender)
      File "/Users/nurzhan_nogerbek/Virtualenvs/py2714/lib/python2.7/site-packages/django/contrib/contenttypes/management/__init__.py", line 119, in create_contenttypes
        content_types, app_models = get_contenttypes_and_models(app_config, using, ContentType)
      File "/Users/nurzhan_nogerbek/Virtualenvs/py2714/lib/python2.7/site-packages/django/contrib/contenttypes/management/__init__.py", line 96, in get_contenttypes_and_models
        for ct in ContentType.objects.using(using).filter(app_label=app_config.label)
      File "/Users/nurzhan_nogerbek/Virtualenvs/py2714/lib/python2.7/site-packages/django/db/models/query.py", line 250, in __iter__
        self._fetch_all()
      File "/Users/nurzhan_nogerbek/Virtualenvs/py2714/lib/python2.7/site-packages/django/db/models/query.py", line 1118, in _fetch_all
        self._result_cache = list(self._iterable_class(self))
      File "/Users/nurzhan_nogerbek/Virtualenvs/py2714/lib/python2.7/site-packages/django/db/models/query.py", line 53, in __iter__
        results = compiler.execute_sql(chunked_fetch=self.chunked_fetch)
      File "/Users/nurzhan_nogerbek/Virtualenvs/py2714/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 894, in execute_sql
        raise original_exception
    django.db.utils.DatabaseError: ORA-03124: two-task internal error


    Хоть миграция и прошла но вывело ошибку. Видимо как-то коряво удалил таблицу slider, что остались возможно какие-то остатки, но не имею понятие как искать их... Хотя данные размышления могут быть лишь моими догадками. Что вы думаете?
    4. Создал уже в приложении, на сайте новый слайд, но по прежнему фиксирует лишь поле head.
  • Как объединить приложения django-modeltranslation и django-reversion?

    @nurzhannogerbek Автор вопроса
    Павел Аксенов, только что сделал еще раз выполнив вышеупомянутые команды:

    python makemigrations slider выводит следующее сообщения:
    No changes detected in app 'slider'

    python manage.py migrate slider выводит следующее сообщения:
    No migrations to apply.

    Заглянул в файл 0001_initial.py, который был создан при миграции еще до этого. Выглядит он следующим образом:
    from __future__ import unicode_literals
    from django.db import migrations, models
    
    class Migration(migrations.Migration):
    
        initial = True
    
        dependencies = [
        ]
    
        operations = [
            migrations.CreateModel(
                name='Slide',
                fields=[
                    ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                    ('head', models.CharField(max_length=200, verbose_name=b'\xd0\x97\xd0\xb0\xd0\xb3\xd0\xbe\xd0\xbb\xd0\xbe\xd0\xb2\xd0\xbe\xd0\xba')),
                    ('head_ru', models.CharField(max_length=200, null=True, verbose_name=b'\xd0\x97\xd0\xb0\xd0\xb3\xd0\xbe\xd0\xbb\xd0\xbe\xd0\xb2\xd0\xbe\xd0\xba')),
                    ('head_en', models.CharField(max_length=200, null=True, verbose_name=b'\xd0\x97\xd0\xb0\xd0\xb3\xd0\xbe\xd0\xbb\xd0\xbe\xd0\xb2\xd0\xbe\xd0\xba')),
                    ('head_kz', models.CharField(max_length=200, null=True, verbose_name=b'\xd0\x97\xd0\xb0\xd0\xb3\xd0\xbe\xd0\xbb\xd0\xbe\xd0\xb2\xd0\xbe\xd0\xba')),
                ],
                options={
                    'ordering': ['pk'],
                    'db_table': 'slider',
                },
            ),
        ]


    Как вы думаете следует ли аннулировать миграции (удалить их) и попробовать еще раз выполнить команды миграции?!
  • Как объединить приложения django-modeltranslation и django-reversion?

    @nurzhannogerbek Автор вопроса
    Павел Аксенов, да были сделаны миграции и в БД создались таблицы REVERSION_VERSION и REVERSION_REVISION и как уже писал в самом посте в таблице REVERSION_VERSION фиксируется лишь поле head =(

    Вот значения поля SERIALIZED_DATA в таблице REVERSION_VERSION:
    [{"model": "slider.slide", "pk": 323, "fields": {"head": "\u0415\u0432\u0440\u0430\u0437\u0438\u044f",}}]
  • Как правильно сделать переадресацию пользователя, если у него нет права доступа к вью?

    @nurzhannogerbek Автор вопроса
    Павел Аксенов, Второй вариант сработал! Cпасибо вам огромное! :) А почему первый вариант не сработал? Ведь там изначально был написан xhr.status.
  • Как правильно сделать переадресацию пользователя, если у него нет права доступа к вью?

    @nurzhannogerbek Автор вопроса
    Ради эксперимента в первом варианте добавил console.log(), чтобы проверить видит ли этот блок, но ничего не выводится. Почему-то JS игнорирует if(xhr.status==302). xhr.status ничего не возвращает =(
    success: function (data, textStatus, xhr) {
        if(xhr.status==302) {
            console.log("TEST MESSAGE");
            window.location.href = xhr.redirectUrl;
        } else {
            $("#user-modal .modal-content").html(data.html_form);
            $("#user-modal").modal("show");
        }
    }
  • Как правильно сделать переадресацию пользователя, если у него нет права доступа к вью?

    @nurzhannogerbek Автор вопроса
    Первый вариант тоже не дал результатов к сожалению =(

    success: function (data, textStatus, xhr) {
                    if(xhr.status==302) {
                        location.href = xhr.redirectUrl;
                    } else {
                        if (data.form_is_valid) {
                           // Мой код из поста
                        }
                        else {
                            // Мой код из поста
                        }
                    }
                },


    По поведению идентичен с тем поведением, который описывал в предыдущем комментарии.
    В логах пишет POST запросе:
    LevelName: INFO | Message: "POST /user/50/edit/ HTTP/1.1" 302 0
    LevelName: INFO | Message: "GET / HTTP/1.1" 200 3793


    В шаблоне выводится ошибка:
    SyntaxError: JSON.parse: unexpected character at line 2 column 1 of the JSON data
  • Как правильно сделать переадресацию пользователя, если у него нет права доступа к вью?

    @nurzhannogerbek Автор вопроса
    Протестировал второй вариант, но редиректа не было =(

    error: function(xhr, ajaxOptions, thrownError) {
            if(xhr.error==403) {
                location.href = '/';
            } else {
               $("#user-errors").fadeIn("slow")
               $("#user-errors .error-description").html(thrownError);
               setTimeout(function() {$("#user-errors").fadeOut("slow");}, 10000);
           }
    },


    При GET запросе в логах пишет:
    LevelName: WARNING | Message: Forbidden (Permission denied): /user/50/edit/
    LevelName: WARNING | Message: "GET /user/50/edit/ HTTP/1.1" 403 22


    При POST запросе в логах пишет:
    LevelName: WARNING | Message: Forbidden (Permission denied): /user/50/edit/
    LevelName: WARNING | Message: "POST /user/50/edit/ HTTP/1.1" 403 22


    После этого я поменял if(xhr.error==403) на if(xhr.warning==403), тогда при POST запросе в шаблон выводится сообщение Forbitten. При GET запросе вижу просто сообщение в логах:
    LevelName: WARNING | Message: Forbidden (Permission denied): /user/edit/delete/
    LevelName: WARNING | Message: "GET /user/131/edit/ HTTP/1.1" 403 22


    Если же убрать raise_exception = True из вьюшки, то все возвращается на исходную. Я имею введу ранее описанное поведению в предыдущем комментарии.
  • Как правильно сделать переадресацию пользователя, если у него нет права доступа к вью?

    @nurzhannogerbek Автор вопроса
    Сергей Горностаев, вообщем бывает следующий случай. К примеру пользователь работает с модулем редактирования пользовательских данных. Работает он без перезагрузки страницы, через AJAX. В то время, когда он работал с вышеупомянутым модулем, администратор ему отключил доступ к этому модулю. Чтобы увидеть сообщение о том что у пользователя отныне нет прав на работу с этим модулем ему нужно перезагрузится. Я же хочу переадресовать пользователя на другой url, там то он и увидит сообщение о том что у него отныне нет прав.
  • Как правильно сделать переадресацию пользователя, если у него нет права доступа к вью?

    @nurzhannogerbek Автор вопроса
    Я протестировал ваш код и заметил странное поведение.

    В логах пишет следующее:
    LevelName: INFO | Message: "GET /user/45/edit/ HTTP/1.1" 302 0
    LevelName: INFO | Message: "GET / HTTP/1.1" 200 2419


    По логам видно, что когда я пытаюсь достучаться по GET запросу на url /user/45/edit/, Джанго перебрасывает меня на / (это и есть адрес reverse_lazy('dashboard')). Вроде как перебрасывает, но по факту переадресация не происходит. Пользователь остается на той же странице. Не могу отследить причину. Я вывожу ошибку в template и выводится следующее:
    SyntaxError: JSON.parse: unexpected character at line 2 column 1 of the JSON data
    Добавил JS код в пост, может проблема из-за нее, хотя сомневаюсь... Можете пожалуйста взглянуть. Ошибка кстати выводится в шаблон при POST запросе. Логи для POST запроса схожи с GET.
  • Формирование queryset-ов для кастомных полей в Джанго?

    @nurzhannogerbek Автор вопроса
    Александр Брагин, CПАСИБО ВАМ ОГРОМНОЕ, что уделили мне так много времени!!!

    Почитал статью детальнее. В ней советовали для начало создал пустую миграцию с помощью следующей команды:
    python manage.py makemigrations --empty users(название приложения)


    Создается файл 0001_initial.py, куда помещается следующий код. Возможно кому-то понадобится, поэтому выкладываю код.

    # -*- coding: utf-8 -*-
    
    from __future__ import unicode_literals
    from django.db import migrations
    
    def forwards_func(apps, schema_editor):
        User = apps.get_model('auth', 'User')
        Permission = apps.get_model('auth', 'Permission')
        ContentType = apps.get_model('contenttypes', 'ContentType')
        content_type = ContentType.objects.get_for_model(User)
        db_alias = schema_editor.connection.alias
        Permission.objects.using(db_alias).bulk_create([
            Permission(codename='view_user', name=' Can view users', content_type=content_type),
            Permission(codename='change_user_password', name=' Can change user password', content_type=content_type)
        ])
    
    
    class Migration(migrations.Migration):
    
        dependencies = [
        ]
    
        operations = [
            migrations.RunPython(forwards_func),
        ]
  • Формирование queryset-ов для кастомных полей в Джанго?

    @nurzhannogerbek Автор вопроса
    Александр Брагин, пробовал поиграться с сигналами и изменил код следующим образом. Ошибка AppRegistryNotReady исчезла, но права так и не создались после команд миграции. Думаю как раз из-за того о чем вы говорили про pre_migrate.

    Спасибо за ссылку! ;) Последний вопрос, я вот ознакомился со статьей, но малость запутался. Если в двух словах в чем вся прелесть кастомной датамиграции?

    signals.py:
    @receiver(pre_migrate, sender=auth_models)
    def add_user_permissions(sender, **kwargs):
        content_type = ContentType.objects.get_for_model(settings.AUTH_USER_MODEL)
        Permission.objects.get_or_create(codename='view_user', name=' Can view users', content_type=content_type)
        Permission.objects.get_or_create(codename='change_user_password', name=' Can change user password', content_type=content_type)


    apps.py:
    from django.apps import AppConfig
    
    class UsersConfig(AppConfig):
        name = 'users'
        verbose_name = "Users"
    
        def ready(self):
            import users.signals


    __init__.py:
    default_app_config = 'users.apps.UsersConfig'
  • Формирование queryset-ов для кастомных полей в Джанго?

    @nurzhannogerbek Автор вопроса
    Александр Брагин, Спасибо за наводку :) По вашему совету нашел на StackOverflow пост. Правда есть предположение, что ответы могут быть не актуальными для Джанго 1.11.

    Поместил в файл __init__.py, который находится в приложении users cледующий код:
    from django.db.models.signals import pre_migrate
    from django.contrib.contenttypes.models import ContentType
    from django.contrib.auth import models as auth_models
    from django.contrib.auth.models import Permission
    from django.conf import settings
    from django.dispatch import receiver
    
    
    @receiver(pre_migrate, sender=auth_models)
    def add_user_permissions(sender, **kwargs):
        content_type = ContentType.objects.get_for_model(settings.AUTH_USER_MODEL)
        Permission.objects.get_or_create(codename='view_user', name=' Can view users', content_type=content_type)
        Permission.objects.get_or_create(codename='change_user_password', name=' Can change user password', content_type=content_type)


    settings.py:
    INSTALLED_APPS = [
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'django.forms',
        'django_select2',  # "django-select2" application
        'custom_app',  # "custom_app" application
        'custom_app_2',  # "custom_app_2" application
        'modeltranslation',  # "django-modeltranslation" application
        'users', # "users" application
    ]


    Ошибка:
    django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.


    В доках нашел описание ошибки, но немного запутался. Получается у меня порядок приложений неправильный в INSTALLED_APPS? Хотя может быть и ошибаюсь... Вам ничего в глаза не бросается?
  • Формирование queryset-ов для кастомных полей в Джанго?

    @nurzhannogerbek Автор вопроса
    Александр Брагин, Cпасибо большое за предложенные варианты изменения формата! Работают на ура! =)

    Разрешите у вас спросить еще одну вещь. Знаю, вопрос уже выходит за рамки данного конкртного вопроса, но все же возможно вы сталкивались уже с данной вещью. В Джанго есть модель данных User и добавив django.contrib.auth в настройки проекта, Джанго создает права автоматически (add/update/delete). Как добавить свои собственные права в модель данных User?

    При кастомной модели все понятно, в класс Meta добавляешь свои собственные права, но не совсем понятно как добавить права в модель данных User и как изменить существующие, которые создались автоматически? Мне кажется уже название уже созданных прав вряд ли поменять, нужно в базе вручную менять, я прав?
  • Формирование queryset-ов для кастомных полей в Джанго?

    @nurzhannogerbek Автор вопроса
    Cпасибо за ссылку! Сейчас нужно будет изучить про filter_horizontal. Да согласен, есть плагин select2 . Удобный плагин, но хотелось что-то на подобии виджета который используется для права пользователя в админке. Думаю для пользователей он тоже довольно удобный. Можно еще один маленький вопрос?! Я покопался в исходниках и в django/contrib/auth/models.py заметил что формат по которому выводится название права пользователя выглядит так:
    def __str__(self):
            return "%s | %s | %s" % (
                self.content_type.app_label,
                self.content_type,
                self.name,
            )

    Как считаете можно ли как то изменить этот формат? Очень громоздко получается.
  • Как добавить переключатели и отметить их при открытии формы?

    @nurzhannogerbek Автор вопроса
    Cпасибо большое за совет! На выходных разобрался :)
  • Как правильно передать строки в функцию?

    @nurzhannogerbek Автор вопроса
    Stalker_RED, Cпасибо большое, ваш совет с .preventDefault(); помог!
  • Как правильно передать строки в функцию?

    @nurzhannogerbek Автор вопроса
    Stalker_RED, также заметил следующее:
    после переадресации в консоли пишет такую ошибку
    TypeError: Argument 1 of FormData.constructor does not implement interface HTMLFormElement.
    . Ругается на эту строку: var formData = new FormData(form[0]); Видимо это и есть причина переадресации.
  • Как правильно передать строки в функцию?

    @nurzhannogerbek Автор вопроса
    Stalker_RED, можете пояснить вашу мысль. Не уловил ход ваших мыслей. Прочитал статью и вы хотите отменить событие переадресацию, я правильно вас понял? Но в самом JS коде я не указывал переадресацию. В JS лишь из шаблона берется action. Запутался вообщем =(

    В html формы указан action:
    <form method="post" action="http://127.0.0.1:8000/user/create/" class='user-create-form' enctype="multipart/form-data">