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

    @dibrovsd
    Нужно
    - сделать url для ajax-запроса, например
    url(r'^/ajax/loadBlockB/$', view='loadBlockB', name='loadBlockB'),
    - В js написать
    $('#id_контейнера').load('/ajax/loadBlockB/')
    И все.

    Предполагается, что вы используете jquery
    Если нет, то любой другой способ выполнить ajax запрос
    Ответ написан
    Комментировать
  • Как определить текущего пользователя из модели?

    @dibrovsd
    А чем не устроили сигналы?
    Создание экземпляров модели может быть инициировано по цепочке сигналов или как-то по другому, а не только через админку.

    Да и что теперь, писать один и тот же код в админке, всех views и так далее.

    Внутри сигнала получить текущего пользователя без обращения к объекту request поможет вот такая middleware:
    djangosnippets.org/snippets/2179
    Она работает и свою задачу выполняет.

    P.S. Если нужно описать более подробно, говорите.
    Не стал описывать в деталях, чтоб не быть К.О.
    Но если не получится разобраться самостоятельно, готов помочь.
    Ответ написан
  • Как в Django реализовать синхронизацию данных моделей?

    @dibrovsd Автор вопроса
    Решение для создания инкрементных данных для передачи на боевой сервер и наката их там.
    На нужные модели вешаем сигналы post_delete для сохранения модель - id в модель удаленных объектов.

    Привожу код создания файлов.
    Чуть позже тут размещу ссылку на статью с более подробным описанием:
    - Создания файлов изменений
    - Накате с созданием файлов отката
    - Откате изменений

    # coding=utf-8
    
    from datetime import datetime
    from os import makedirs, listdir
    import json
    
    from django.core import serializers
    from django.core.management.base import BaseCommand
    from optparse import make_option
    from django.db.models.loading import get_model
    from django.conf import settings
    
    
    class Command(BaseCommand):
        help = """
        Create difsettings from timestamp. 
        Usage: manage.py docflow_diffsettings_create '2014-01-01'
        """
    
        option_list = BaseCommand.option_list + (
            make_option('--from',
                action="store", 
                type="string",
                dest='from',
                help='timestamp: changed from argument to current DateTime'),
            make_option('--project_id',
                action="store", 
                type="int",
                dest='project_id',
                help='Docflow project number'),
        )
    
        def __init__(self, *vargs, **kwargs):
    
            super(Command, self).__init__(*vargs, **kwargs)
            self._datetime_format = '%Y-%m-%d %H:%M'
    
        def handle(self, *args, **options):
    
            date_to = datetime.now()
            date_from = datetime.strptime(options['from'], self._datetime_format)
    
            project_id = options["project_id"]
            project_folder = "%s/docflow/diffsettings/%s" % (settings.BASE_DIR, project_id,)
            folder_path = "%s/%s > %s" % (project_folder, 
                                        date_from.strftime(self._datetime_format),
                                        date_to.strftime(self._datetime_format))
            
            makedirs(folder_path)
    
            JSONSerializer = serializers.get_serializer("json")
            json_serializer = JSONSerializer()
    
            models_paths = set()
    
            for model_path in args:
                models_paths.add(model_path)
    
            # deleted objects
            models_paths.add('docflow.ObjectsDeleted')
    
            # create files
            for model_path in models_paths:
    
                application_name, model_name = model_path.split('.')
                model = get_model(application_name, model_name)
                objects_changed = model.objects.filter(d_change__range=(date_from, 
                                                                        date_to))
                
                # Обязательно наличие файла, даже если нет ни одной измененной модели
                # это необходимо для создания бэкапа при накате настроек 
                # (если по модели нет изменившихся, но есть удаленные объекты)
                # Создание файла отката настроек происходит 
                # внутри итерации перебота этих файлов
                with open("%s/%s.json" % (folder_path, model_path), "w") as out:
                    json_serializer.serialize(objects_changed, stream=out, indent=4)
    Ответ написан
    Комментировать
  • Как в Django реализовать синхронизацию данных моделей?

    @dibrovsd Автор вопроса
    Вроде как задача должна быть типичной:
    есть test, есть production, нужно с теста сливать настройки в prod.
    Неужели нет подобного механизма, доступного и поддерживаемого кем-то.

    Собственно, в этом направлении и думаю.
    Если никто не подскажет готового решения, так и сделаю.
    Спасибо.
    Ответ написан