Задать вопрос
  • Cохранения данных в ManyToManyField?

    @nurzhannogerbek Автор вопроса
    Дмитрий Бурнаев: Cпасибо, что уделили время и за все ваши советы! В итоге решил отказаться от ModelChoiseField. Буду использовать тот же виджет, что и в поле program с возможностью выбрать лишь один объект. Так легче и форма редактирования тоже правильно указывает, то что нужно. Спасибо вам еще раз!

    $('#id_function').djangoSelect2({maximumSelectionLength: 1});
  • Cохранения данных в ManyToManyField?

    @nurzhannogerbek Автор вопроса
    Дмитрий Бурнаев: Я поставил как вы и сказали. Выдала такую ошибку. Вообще запутался окончательно:

    TypeError: Значение '[UUID('8b3e3b85-418e-46ef-b7c7-6d1a7fc6b66a')]' не является верным UUID-ом.

    Что вы думаете на счет этого?
  • Cохранения данных в ManyToManyField?

    @nurzhannogerbek Автор вопроса
    Дмитрий Бурнаев: Также у меня есть форма для редактирования. Использую instance во view, чтобы вывести текущие значения объекта Requirement. Проблемы опять с этим полем function. Не показывает текущее значение (показывает значение из empty_label), хотя поле programs выводит текущие значения. Думаю проблема опять таки из за связки M2MField с ModelChoiseField. =(
  • Cохранения данных в ManyToManyField?

    @nurzhannogerbek Автор вопроса
    Дмитрий Бурнаев: Не знаю даже из за чего, но теперь выдает вот такую вот ошибку:

    Traceback (most recent call last):
      File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\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-32\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-32\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-32\lib\site-packages\reversion\revisions.py", line 296, in do_revision_context
        return func(*args, **kwargs)
      File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\db\models\query.py", line 660, in exists
        return self.query.has_results(using=self.db)
      File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\db\models\sql\query.py", line 494, in has_results
        return compiler.has_results()
      File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\db\models\sql\compiler.py", line 806, in has_results
        return bool(self.execute_sql(SINGLE))
      File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\db\models\sql\compiler.py", line 824, in execute_sql
        sql, params = self.as_sql()
      File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\sql_server\pyodbc\compiler.py", line 91, in as_sql
        where, w_params = self.compile(self.where) if self.where is not None else ("", [])
      File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\sql_server\pyodbc\compiler.py", line 213, in compile
        return super(SQLCompiler, self).compile(node, select_format)
      File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\db\models\sql\compiler.py", line 353, in compile
        sql, params = node.as_sql(self, self.connection)
      File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\db\models\sql\where.py", line 79, in as_sql
        sql, params = compiler.compile(child)
      File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\sql_server\pyodbc\compiler.py", line 213, in compile
        return super(SQLCompiler, self).compile(node, select_format)
      File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\db\models\sql\compiler.py", line 353, in compile
        sql, params = node.as_sql(self, self.connection)
      File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\db\models\fields\related_lookups.py", line 115, in as_sql
        return super(RelatedLookupMixin, self).as_sql(compiler, connection)
      File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\db\models\lookups.py", line 156, in as_sql
        rhs_sql, rhs_params = self.process_rhs(compiler, connection)
      File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\db\models\lookups.py", line 92, in process_rhs
        return self.get_db_prep_lookup(value, connection)
      File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\db\models\lookups.py", line 182, in get_db_prep_lookup
        [get_db_prep_value(value, connection, prepared=True)]
      File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\db\models\fields\related.py", line 912, in get_db_prep_value
        return self.target_field.get_db_prep_value(value, connection, prepared)
      File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\db\models\fields\__init__.py", line 2373, in get_db_prep_value
        raise TypeError(self.error_messages['invalid'] % {'value': value})
    TypeError: Значение '[<Function: B.2.2: Наименование функции 9>]' не является верным UUID-ом.
  • Cохранения данных в ManyToManyField?

    @nurzhannogerbek Автор вопроса
    Дмитрий Бурнаев: Можете пожалуйста подробнее расписать функцию clean_function()? Я попробовал что-то на подобии этого, но получил ошибку: TypeError: 'Function' object is not iterable

    def clean_function(self):
        data = self.cleaned_data['function']
        return data
  • Cохранения данных в ManyToManyField?

    @nurzhannogerbek Автор вопроса
    Арсен Абакаров: Здравствуйте! Если вкратце, так получились, что то в данной конкретной форме мне нужно записать лишь один объект из queryset в поле function. Есть другие формы, которые тоже использует ManyToManyField, там то я уже записываю несколько объектов в поле function. Со стороны, не зная всех нюансов проекта может показаться использование M2M необоснованным, согласен, но поверьте мне нужен M2M для других форм, где происходит добавление множества объектов. Просто так получилось, что в данном конкретной форме нужно записать лишь один объект в поле function.
  • Как создать древовидный список с сheckbox?

    @nurzhannogerbek Автор вопроса
    Павел Аксенов: Также хочется спросить как должен выглядеть forms.py в моем случаи? Просто не укладывается в голове немного полная картина. Есть модель данных другая (Requirement), которую не описал в посте, с полем ManyToManyField (поле function). Прокликанные значения (values) из чекбоксов нужно будет записать в это cамое поле function. По сути я должен создать собственный виджет и указать его в поля function в forms.py? Я правильно понимаю?

    models.py:
    class Requirement(models.Model):
        name = models.CharField(_('Name'), max_length=250)
        function = models.ManyToManyField("Function")


    forms.py:
    class RequirementForm(forms.ModelForm):
        class Meta:
            model = Requirement
            fields = ('name', 'function')
            widgets={'function': ???}
  • Cохранения данных в ManyToManyField?

    @nurzhannogerbek Автор вопроса
    В целом тот подход описанный выше можно применить. Взяв значение из полей и вручную записать их. Хоть это и работает, хочется знать насколько это правильно так делать? Что вы можете сказать? Есть ли негативные стороны такова подхода, которые могут мне выйти боком скажем так?

    function= requirement_form.cleaned_data['function']
    programs = requirement_form.cleaned_data['programs']
    
    requirement= requirement_form.save(commit=False)
    
    requirement.function.add(function)
    for program in programs:
        requirement.program.add(program)
  • Как создать древовидный список с сheckbox?

    @nurzhannogerbek Автор вопроса
    Павел Аксенов: Понятно. Я хотел у вас уточнить. Где делать такой перебор? Во view или сразу в template? Привел пример. Еще вопрос к каждой функции я добавлю чексбоксы, а как потом как во view допустим получить список прокликанных сheckbox-ов?
    views.py:
    groups = Group.objects.all()
    for group in groups:
        tasks = Task.objects.filter(group=group)
        for task in tasks:
            function = Function.objects.filter(task=task)


    template:
    <form method="post" action="">
    {% for group in groups %}
        {% for task in group.task_set.all %}
            {% for function in task.function_set.all %}
                <p><input type="checkbox" name="function-{{ forloop.counter }}" value="{{ function }}"><span>{{ function }}</span></p>
            {% endfor %}
        {% endfor %}
    {% endfor %}
    
    <input type="submit" value="Отправить">
    </form>
  • Cохранения данных в ManyToManyField?

    @nurzhannogerbek Автор вопроса
    Здравствуйте! Я тоже думал проблема из за того, что я пытаюсь записать лишь одну запись в ManyToManyField. Не хочется вдаваться во все детали, но использовать ForeignKey не мой вариант. Необходимо записать лишь одну запись в ManyToManyField. Вы упомянули сказав: использовать другой виджет или доработать этот. Можете пожалуйста раскрыть вашу мысль подробнее или показать на примере как. У меня была идея идея во view вручную записать данные взяв их из поля function. Правда не знаю насколько этот подход эффективен.

    function= requirement_form.cleaned_data['function']
    requirement= requirement_form.save(commit=False)
    requirement.function.add(function)
  • Как создать Multiple Select Box в Джанго?

    @nurzhannogerbek Автор вопроса
    Павел Аксенов: Ну, в моем случаи я загружаю разные формы в модальное окно в разных ситуациях. Например форма для добавления, форму для редактирования, которые отличаются. Спасибо вам большое за помощь и подробные ответы!
  • Как создать древовидный список с сheckbox?

    @nurzhannogerbek Автор вопроса
    Павел Аксенов: Вот оно как. Спасибо за информация. А есть ли какие нибудь готовые решения, проекты которые вы могли бы посоветовать? Не могу понять с чего мне начать и отталкиваться в решении данной проблемы.
  • Как создать Multiple Select Box в Джанго?

    @nurzhannogerbek Автор вопроса
    Павел Аксенов: А можно ли в шаблоне, где находиться форма указать блоки style и script? Вроде так нельзя. Я имею введу, что при загрузки формы загружались .media.сss и .media.js в блоки script и style?
  • Как создать Multiple Select Box в Джанго?

    @nurzhannogerbek Автор вопроса
    Павел Аксенов: Я поставил как вы сказали после закрывающего тега , правда виджет так и не появился, но повнимательнее присмотревшись я заменил что {{ product_form.media.js }} генерирует:

    <script src="{% static 'django_select2/django_select2.js' %}"></script>
    <script src="http://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/js/select2.min.js"></script>


    Пришлось всеже в ручную указать данные ссылки в блоке script и виджет появился. К тоже меня немного смущает, что сгенирированный от {{ product_form.media.сss }} находится скажем так в середине тега body, вроде это противоречит законом объявления стилей. Поэтому его также указал в блоке style добавив:

    <link rel="stylesheet" href="http://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/css/select2.min.css">


    А $('#id_company').djangoSelect2({multiple: true}) поставил к конце success как вы и посоветовали. Спасибо вам! Конечно все это работает, но не покидает ощущение, что это все в будущем может мне это выйти боком. Как вы считаете?
  • Как создать Multiple Select Box в Джанго?

    @nurzhannogerbek Автор вопроса
    Павел Аксенов: Комментарий на последнее ваше сообщение. Поясните пожалуйста, что вы имеете введу под цитирую: ".media.css и .media.js добавить после тега"?
  • Как создать Multiple Select Box в Джанго?

    @nurzhannogerbek Автор вопроса
    Павел Аксенов: Я добавить $('#id_company').djangoSelect2({multiple: true}); в ajax в beforeSend, думал заработает, но те места где объявил {{ product_form.media.css }} и {{ product_form.media.js }} пусты. Проверял html в браузере. Тогда я решил в ручную указать эти файлы и добавил следующее, но виджет Select2MultipleWidget так и не появился. Что можете еще посоветовать?

    <link rel="stylesheet" href="http://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/css/select2.min.css">
    <script src="{% static 'django_select2/django_select2.js' %}"></script>
  • Как создать Multiple Select Box в Джанго?

    @nurzhannogerbek Автор вопроса
    Павел Аксенов: Знаете, я забыл упомянуть, что форма находится в модальном окне, и содердимое модального окна загружается через AJAX. Я ради эксперимента попробовал добавить форму за пределы модального окна и виджет работает. Как исправить такое дело, можете подсказать? Добавил в пост JS код, который загружает форму в модальное окно. Можете взглянуть на него пожалуйста?
  • Как создать Multiple Select Box в Джанго?

    @nurzhannogerbek Автор вопроса
    Павел Аксенов: Здравствуйте! Я пробовал так тоже, но это не дало результатов. Я взглянул в html код в браузере и в тех местах, где объявил {{ product_form.media.css }} и {{ product_form.media.js }} пусто. К тому же в консоли браузера ошибка, могу предположить потому что не установился product_form.media.js. Что вы думаете по этому поводу?

    Error in console:
    Uncaught TypeError: $(...).djangoSelect2 is not a function at 127.0.0.1/:131
  • Как раскрыть и закрыть несколько блоков одновременно?

    @nurzhannogerbek Автор вопроса
    Alik Send: Спасибо большое за детальный ответ! Это как раз то, что искал долгое время.
  • Как раскрыть и закрыть несколько блоков одновременно?

    @nurzhannogerbek Автор вопроса
    Здравствуйте! Можете пожалуйста проверить данный код у себя? Потому что я попробовал и он работает не корректно. При нажатии на основную кнопку (expand-collapse) открывается и закрывается лишь первый блок. Остальные блоки не реагируют. Как можно объединить данные две части вашего кода в один?