Как сохранить поля, которые не являются частью формы, но обязательны для заполнения в Django - PullRequest
1 голос
/ 15 июля 2009

У меня есть модель с полем, которое является обязательным, но не введено пользователем, и мне трудно сохранить модель без ошибок. Мое определение модели выглядит так:

class Goal(db.Model):
  author = db.UserProperty(required=True)
  description = db.StringProperty(multiline=True, required=True)
  active = db.BooleanProperty(default=True)
  date = db.DateTimeProperty(auto_now_add=True)

class GoalForm(djangoforms.ModelForm):
  class Meta:
    model = Goal
    exclude = ['author', 'active']

И я использую django-формы в appengine для создания и проверки формы. Когда я пытаюсь сохранить результат этой формы, однако ....

  def post(self):

    data = GoalForm(data=self.request.POST)

    if data.is_valid():

      goal = data.save(commit=False)
      goal.author = users.get_current_user()

      goal.put()
      self.redirect('/')

Я получаю сообщение "ValueError: Невозможно создать цель (необходим автор свойства)"

Теперь я подумал бы, что, приняв commit = False, добавив свойство Goal и сохранив объект, я смогу это сделать, но, очевидно, это не работает. Есть идеи?

Ответы [ 3 ]

2 голосов
/ 15 июля 2009

Обратите внимание, что save () вызовет ValueError, если данные в форме не проверяются

Вы можете найти то, что вам нужно о методе save () здесь:

http://docs.djangoproject.com/en/dev/topics/forms/modelforms/#the-save-method

Редактировать: Вместо goal.put () сделать цель.save ()

Edit2: Это должно решить вашу проблему:

goal = Goal(author='Mr') #example
data = GoalForm(data=self.request.POST, instance=goal)
1 голос
/ 19 ноября 2009

Я понимаю, что это старый вопрос, но ради других, ищущих аналогичный ответ, я выкладываю следующее:

Если только я не пропустил причину, почему я этого не сделал, но я считаю, что это то, что вам нужно:

class Goal(db.Model):
  author = db.UserProperty(auto_current_user_add=True)
  ...
  ...

Для справки: Типы и классы свойств: класс UserProperty ()

0 голосов
/ 15 июля 2009

Ваш GoalForm должен наследоваться от django.forms.ModelForm и быть определен так, что он требует только некоторых полей:

class GoalForm(django.forms.ModelForm):
    class Meta:
        model = Goal
        fields = ('description', 'etc')

Не уверен, что это полностью работает в AppEngine.

Вы также должны сохранить форму (все еще не уверены в AppEngine):

data = GoalForm(data=self.request.POST)

if data.is_valid():
  data.author = users.get_current_user()
  data.put()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...