Наверное, глупый вопрос, но я не уверен, как справиться с этим «правильным».

Получилась нормальная форма с некоторыми полями. Я могу вставить данные без проблем. Когда я хочу отредактировать запись, я использую функцию «model_to_dict» для заполнения формы. После редактирования записи я хочу сохранить ее, и тут начинаются мои проблемы.

В документации django говорится, что модель автоматически создает или обновляет запись в зависимости от значения pk. если значение pk существует, это обновление, в противном случае - вставка. Итак, я создал эту функцию сохранения:

def save(self, primary_key=0):
    mymodel = Somemodel(pk=primary_key,
        samplefield=self.cleaned_data['samplefield'],
    )
    mymodel .save()
    print 'PK:'+str(d.pk)
    # Handle the MultipleChoiceField's
    for x in self.cleaned_data['paymentMethod']:
        x.mymodel_set.add(d)

Итак, это нормально работает, когда я редактирую запись. Но когда я вставляю новую запись, она вставляется нормально, но mymodel.id = 0, что означает, что я не могу сохранить отношения для MultipleChoiceFields.

Итак, я хотел бы знать, хороший ли это способ справиться с этим? И почему после сохранения модели mymodel.id = 0?

2
Ben 23 Янв 2010 в 13:47

2 ответа

Лучший ответ

0 - действительное целое число PK. Вместо этого используйте None.

1
Ignacio Vazquez-Abrams 23 Янв 2010 в 13:51

Во-первых, почему вы не используете ModelForm? Это правильный способ справиться с этой ситуацией.

Отвечая на ваш вопрос «почему pk 0», это потому, что вы явно установили его равным 0, если PK не передан в функцию. Если вы не хотите устанавливать его на 0, используйте None по умолчанию.

0
Daniel Roseman 23 Янв 2010 в 13:54
Привет, Даниэль, я использую обычную форму, потому что у меня проблемы с обработкой дополнительных полей в отношениях «многие ко многим» в modelForms.
 – 
Ben
23 Янв 2010 в 14:01