Преобразование поля Django ManyToMany в ModelForm - PullRequest
0 голосов
/ 28 июля 2011

У меня в этой модели есть множество полей, которые я переопределил с помощью CharField, который получает список csv атрибута имени второй модели.

class PostForm(ModelForm):
    tests = CharField(label="tests")

    class Meta:
        model = Post
        fields = ('title','body')

    def clean_tests(self):
       # Here I clean, create or retrieve and return a list of Test objects.

Теперь с этим кодом все в порядке, сохраняя и проверяя, все работает, моя проблема возникает, когда я создаю PostForm с существующим экземпляром, например PostForm(instance=current_post).

CharField должен содержать список csv, но он ничего не содержит, очевидно, это происходит потому, что не происходит преобразования из списка тестовых объектов в список тестовых имен, проблема в том, что я не знаю, куда поместить этот код, я не вижу метода Я мог бы переопределить, чтобы сделать это, я посмотрел на исходные данные и свойства полей по умолчанию.

1 Ответ

0 голосов
/ 28 июля 2011

Я не уверен, есть ли метод, который вы могли бы переопределить, чтобы сделать это - если взглянуть на конструктор BaseModelForm , то все равно выглядит вполне нормально, если указать instance и initial ключевых аргументов вместе - instance преобразуется в dict (в соответствии с параметрами fields и exclude в Meta), а метод update этого диктанта вызывается с initial. Примерно так должно работать:

# build your csv list somehow (just speculation here)
tests = ','.join(test.name for test in current_post.tests.all())

form = PostForm(instance=current_post, initial={'tests': tests})
...