保存表单数据重写同一行

发布于 2024-11-05 04:18:17 字数 1373 浏览 4 评论 0原文

我不知道如何保存创建新行的表单数据,保存时只是使用相同的“id”重写数据,并在有多行时出现错误,这是我的代码:

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)

视图.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)

i can't figure out how to save my form data creating a new row, when saving it just rewrites the data using the same 'id' and trhows me an error when there are multiple rows, this is my code:

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)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

開玄 2024-11-12 04:18:17

如果要创建新行,请创建它。 :-) 就像

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)。

PS刚刚注意到您的模型中没有 visit_date 字段,我认为您的意思是 sub_date

If you want to create a new row, create it. :-) Like

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

Now you use get_or_create method which tries to find a row with given parameters, so that's why you updating it. And this method throws an error when there are multiple rows, yes, it's its normal behavior.

By the way it's better to place this saving code in form's method (save for example).

P. S. Just noticed you don't have visit_date field in your model, I think you meant sub_date.

时光沙漏 2024-11-12 04:18:17

您可以简单地使用 create 而不是使用 get_or_create

Store.objects.create(
    submitter=submitter,
    name=form.cleaned_data['name'],
    st=form.cleaned_data['st'],
    visit_date=form.cleaned_data['visit_date']
)

可以找到有关差异的更多信息Django Model() 与 Model.objects.create()

Instead of using get_or_create you can simply use create

Store.objects.create(
    submitter=submitter,
    name=form.cleaned_data['name'],
    st=form.cleaned_data['st'],
    visit_date=form.cleaned_data['visit_date']
)

More information about the differences can be found Django Model() vs Model.objects.create()

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文