Как создать поле списка в django

Ответ Томаса работает, но файл jar, который он создает, не тот, который вы можете использовать для фактического запуска приложения.

Я закончил с:

<?xml version="1.0" ?>
<!-- Configuration of the Ant build system to generate a Jar file --> 
<project name="TDSz Data Mover" default="CreateJar">
  <target name="CreateJar" description="Create Jar file">
        <delete file="DataMover.jar"/>
        <jar jarfile="DataMover.jar" basedir="bin/" includes="**/*.class **/Messages*.*" " update="no">
            <zipfileset dir="D:/Java/mylib" erroronmissingarchive="true">
                <include name="*.jar" />
            </zipfileset>  
            <manifest>
                <attribute name="Main-Class" value="some.package.and.app"/>
            </manifest>             
        </jar>
  </target>
</project>

Не знаю, изменилось ли что-то в муравье с тех пор, как был дан этот ответ, но потребовалось некоторое копание, чтобы фактически заставить его работать Многие решения в уроках были лишь частичными ответами ...

Основные изменения:

  • Добавлено удаление файла jar, так как он не восстанавливался, когда я перезапускал сборку ant после изменения файла сборки.
  • Добавлен манифест для правильной установки исполняемого файла.
  • Извлечение некоторых файлов .jar в качестве библиотек
  • Извлечение файлов Message_ для поддержки NLS

Netbeans делает это намного проще - просто отметьте пару флажков.

[Отредактировано для устранения проблемы с некорректно завершенным тегом jar и извлечения файлов .jar]

27
задан gene_wood 8 August 2014 в 21:35
поделиться

4 ответа

Попробуйте использовать CommaSeparatedIntegerField, который описан здесь: http://docs.djangoproject.com/en/1.2/ref/models/fields/#commaseparatedintegerfield

5
ответ дан 28 November 2019 в 05:08
поделиться

Рассмотрим django-jsonfield , преимущества:

  • Сохранение и загрузка объектов нативного списка, преобразование не требуется
  • Хорошо протестированное и зрелое решение
  • Может иметь и другие преимущества в вашем проекте
  • Поддерживает фильтрацию базы данных и регулярное выражение (при необходимости)

также:

  • Перекрестная база данных support
  • Поддерживает Python 2.7 - Python 3.4 и Django 1.4 - 1.8
  • Действительно просто:)
4
ответ дан 28 November 2019 в 05:08
поделиться

Хотя ответ jathanism велик, я получаю следующую ошибку при попытке использовать команду dumpdata:

Error: Unable to serialize database: get_db_prep_value() takes at least 3 arguments (2 given)

Проблема в том, что вызов self.get_db_prep_value в методе value_to_string требует connection значение, которое будет предоставлено (по крайней мере, в Django 1.4.10 , который я использую). В конце концов, я действительно не увидел, что получалось, если сначала вызвал метод value_to_string, и удалил его вместе с ненужным методом __init__. Вот чем я закончил:

class ListField(models.TextField):
    __metaclass__ = models.SubfieldBase
    description = "Stores a python list"

    def to_python(self, value):
        if not value:
            value = []

        if isinstance(value, list):
            return value

        converted = ast.literal_eval(value)
        if not isinstance(converted, list):
            raise ValueError('Value "%s" not a list' % converted)

        return converted
2
ответ дан 28 November 2019 в 05:08
поделиться

Просто вы можете сохранить список в виде строки и всякий раз, когда его используете, используйте ast.literal_eval (), чтобы сначала преобразовать в список из строки. Например:

import ast

class MyModel(models.Model):
    field_1 = models.any kind of field()
    list_field = models.CharField(max_length=255)

    def get_list(self):
        list = ast.literal_eval(self.list_field)
        return list

так же в представлениях и т. д. При сохранении сделайте опцию в списке и, наконец, преобразуйте его в строку следующим образом:

model.list_field = str(list)
model.save()
0
ответ дан 28 November 2019 в 05:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: