Джанго "Дубликат" ModelForm - PullRequest
       7

Джанго "Дубликат" ModelForm

2 голосов
/ 31 августа 2010

Мне интересно, существует ли простой способ создания «дубликата» ModelForm в Django - то есть формы, которая предварительно заполнена содержимым существующего экземпляра модели (за исключением определенных полей, таких как уникальные), но создает новый экземпляр при сохранении.

Я думал о том, чтобы передать экземпляр в ModelForm, чтобы данные были предварительно заполнены, как в форме «edit», а затем перед сохранением установили None, но это дает объекту «NoneType» не атрибут "pk" "ошибка при вызове .save () в форме. Кажется, что предоставление экземпляра при создании формы создает некоторую зависимость от его присутствия в конце.

У меня возникли проблемы с поиском решения этой проблемы, но я не могу представить, что «дублирующая» форма является слишком уникальной, поэтому, может быть, я упускаю что-то простое?

Любая помощь будет оценена.

Ответы [ 2 ]

1 голос
/ 31 августа 2010
class AddressForm(forms.ModelForm):
    class Meta:
        model = Address

# Inside view:
address = Address.object.get(pk=<your-id>)
address.pk = None # that's the trick, after form save new object will be created
form = AddressForm(instance=address)
1 голос
/ 31 августа 2010

Я думаю, что вам нужен способ заполнить начальные значения для полей в форме. Лучший способ сделать это - создать словарь начальных значений (с указанием имени поля) из существующего экземпляра и передать его в форму.

Примерно так:

class AddressForm(forms.ModelForm):
    class Meta:
        model = Address

# Inside view:
address = Address.object.get(**conditions)
initial = dict()
for field in ('state', 'zipcode'): # Assuming these are the fields you want to pre-fill
    initial[field] = getattr(address, field)

form = AddressForm(initial = initial)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...