Django - ошибка проверки формы - PullRequest
3 голосов
/ 20 мая 2010

У меня есть модель , как это:

class Entity(models.Model):    
    entity_name = models.CharField(max_length=100)
    entity_id = models.CharField(max_length=30, primary_key=True)
    entity_parent = models.CharField(max_length=100, null=True)
    photo_id = models.CharField(max_length=100, null=True)
    username = models.CharField(max_length=100, null=True)
    date_matched_on = models.CharField(max_length=100, null=True)
    status = models.CharField(max_length=30, default="Checked In")

    def __unicode__(self):
        return self.entity_name

    class Meta:
        app_label = 'match'
        ordering = ('entity_name','date_matched_on')
        verbose_name_plural='Entities'

У меня также есть вид , например:

def photo_match(request):
''' performs an update in the db when a user chooses a photo '''

    form = EntityForm(request.POST)
    form.save()

И мой EntityForm выглядит так:

class EntityForm(ModelForm):
    class Meta:
        model = Entity

Форма моего шаблона возвращает POST обратно в представление со следующими значениями:
{u'username ': [u'admin'], u'entity_parent ': [u'PERSON'], u'entity_id ': [u'152097'], u'photo_id ': [u'2200734'], u 'entity_name': [u'AJ Маклин '], u'status: [u'Checked Out], u'date_matched_on': [u'5 / 20/2010 10:57 AM ']}

И form.save () выдает эту ошибку:

Исключение в photo_match: объект не может быть изменен, поскольку данные не проверены.

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

Спасибо, Игорь

1 Ответ

5 голосов
/ 20 мая 2010

Если сущность, которую вы пытаетесь обновить, уже сохранена, тогда вам нужно предоставить параметр экземпляра при привязке формы, иначе во время сохранения будет пытаться выполнить INSERT, а не UPDATE, и новый объект не будет проверен (посмотрите документы django здесь ).

Попытка:

def photo_match(request):
''' performs an update in the db when a user chooses a photo '''

    entity = Entity.objects.get(pk=request.POST['entity_id'])
    form = EntityForm(request.POST, instance=entity)
    form.save()

Вы, конечно, захотите быть немного более здравым в том, как вы смотрите на сущность.

...