Ответ Томаса работает, но файл 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>
Не знаю, изменилось ли что-то в муравье с тех пор, как был дан этот ответ, но потребовалось некоторое копание, чтобы фактически заставить его работать Многие решения в уроках были лишь частичными ответами ...
Основные изменения:
Netbeans делает это намного проще - просто отметьте пару флажков.
[Отредактировано для устранения проблемы с некорректно завершенным тегом jar и извлечения файлов .jar]
Попробуйте использовать CommaSeparatedIntegerField
, который описан здесь: http://docs.djangoproject.com/en/1.2/ref/models/fields/#commaseparatedintegerfield
Рассмотрим django-jsonfield , преимущества:
также:
Хотя ответ 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
Просто вы можете сохранить список в виде строки и всякий раз, когда его используете, используйте 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()