在 django 中使用表单更新数据库

Posted

技术标签:

【中文标题】在 django 中使用表单更新数据库【英文标题】:update database with form in django 【发布时间】:2015-03-04 06:58:58 【问题描述】:

我想将数据保存到数据库中。我有两个表,如 models.py 中所示。每本书都有几个出版物。我希望在表格中插入每个酒吧的价格,然后更新数据库。现在的问题是,当我输入价格时,它会在桌子上添加任何东西Version,还有一点是,一开始用户没有书,而在他添加钱的时候它会创建一本书。

models.py

class book(models.Model):
        user = models.OneToOneField(User,related_name='user')
        Price_init = models.IntegerField(default=0)
        Date_creation = models.DateTimeField('date creation')

class version(models.Model):
        date_pub = models.DateTimeField('date pub')
        price = models.IntegerField()
        Dprice = models.IntegerField()
        book = models.ForeignKey(book)

我的view.py

@login_required(login_url='/view/login/')
def addVersion(request,Book_id):
    response=
    book1 = book.objects.get(id=book_id)
    class AddForm(forms.Form):
        Price = forms.IntegerField()
    if request.method=='post':
       form=AddForm(request.POST)
       if form.is_valid():
           try:
                version1 = Version()
                version1.date_pub= datetime.now()
                version1.price=form.cleaned_data['Price']
                version1.book_id= book_id
                version1.Dprice = -(form.cleaned_data['Price'])
                version1.save()
           except:
                xxx=0
           return render_to_response('addVersion.html')
       else:
           form.errors
           return HttpResponse('form invalid')
    else:
        return render(request,'frontend/addVersion.html',response)
    tr.save()
    return render(request,'frontend/addVersion.html',response)

addVersion.html

<form name="form" method="POST" action="" id="form"> % csrf_token %
                        <p style="text-align:center" class="text-error"></p>
                <p style="text-align:center;margin-top:20px"><input id="" name="form" required="required" style="width:100px" value="Price" type="text"></p>
        <p> <br></p>

【问题讨论】:

here 是答案 【参考方案1】:

问题:1 现在的问题是,当我输入价格时,它会在表格版本中添加任何内容。 ?

解决方案:正确进行表单验证

bookObj = book.objects.get(id=book_id)
if request.method=='POST':
   form=AddForm(request.POST)
   if form.is_valid():
      version1 = Version()
      version1.date_pub= datetime.now()
      version1.price = form.cleaned_data['Price']
      version1.book_id = book_id
      version1.Dprice = form.cleaned_data['Price']
      version1.save()

问题:2 用户一开始没有书,在他加钱的时候创建了一本书。 ?

钱从哪里来?

【讨论】:

谢谢你的回答,但我看不出我写的和你给我的建议有什么区别 我把“post”写成大写,出现“form invalid”,你知道如何解决这个问题吗? 对不起,它的“addForm”不是“ajouterForm”,我复制了错误的代码,我会编辑它 它必须只保存一个整数,我会放javascript 每本书有多个版本,每个版本都有一个价格,每个用户都有一本书,我有一个包含输入的表单,允许用户输入价格,Dprice是与价格相反,只要 price =50, Dprice = -50, date_pub ,它就会检索用户添加版本的日期

以上是关于在 django 中使用表单更新数据库的主要内容,如果未能解决你的问题,请参考以下文章

单击并在数据库中更新时在 Django 中编辑表单字段

Django 编辑表单数据:数据被复制而不是被更新

提交表单后,Django 没有更新我的数据库

Django 模型表单不更新数据库记录

如何预填充 Django 更新表单并将其写回数据库

Django Crispy 表单 - 更新视图的内联表单集“ManagementForm 数据”错误