Сохранение данных формы перезаписывает ту же строку

avatar
user739030
5 мая 2011 в 02:00
1399
1
11

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

models.py:

class Submitter(models.Model):
    submitter=models.ForeignKey(User)

    def __unicode__(self):
        return self.submitter.username

class Store(models.Model):
    creator=models.ForeignKey(Submitter)
    name = models.CharField(_('name'),blank=True,max_length=30)
    st = models.CharField(_('Street'),blank=True,max_length=30)
    sub_date = models.DateField(_('Visit Date'),)

    def __str__(self):
        return u'%s-%s-%s'%(self.creator,self.name,self.sub_date)

views.py:

def StoreSave(request):    
    if request.method == 'POST':
        form = StoreForm(request.POST)
        if form.is_valid():
            submitter, dummy= Creator.objects.get_or_create(creator=request.user)
            store, created = Store.objects.get_or_create(
                submitter=submitter
            )
            store.name = form.cleaned_data['name']
            store.st = form.cleaned_data['st']
            store.visit_date = form.cleaned_data['visit_date']
            store.save()
            return HttpResponseRedirect('/user/%s/' % request.user.username)
    else:
        form = StoreForm()
    variables = RequestContext(request, {
            'form': form
    })
    return render_to_response('store/create_store.html', variables)
Источник

Ответы (1)

avatar
DrTyrsa
5 мая 2011 в 06:51
8

Если вы хотите создать новую строку, создайте ее. :-) Нравится

store = Store(submitter=submitter,
              name=form.cleaned_data['name'],
              st=form.cleaned_data['st'],
              store.visit_date=form.cleaned_data['visit_date'])
store.save()

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

Кстати, этот код сохранения лучше поместить в метод формы (например, save).

П. S. Только что заметил, что в вашей модели нет поля visit_date, я думаю, вы имели в виду sub_date.