django - как сохранить форму (не modelForm) - PullRequest
2 голосов
/ 23 января 2010

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

Я получил нормальную форму с некоторыми полями. Я могу вставить данные без проблем. Когда я хочу отредактировать запись, я использую функцию «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 ]

1 голос
/ 23 января 2010

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

0 голосов
/ 23 января 2010

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

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

...