Django models 使用django编辑和更新数据库中的行
models.pyDjango models 使用django编辑和更新数据库中的行,django-models,django-forms,django-views,Django Models,Django Forms,Django Views,models.py class Author(models.Model): first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=40) email = models.EmailField() age = models.IntegerField() def __unicode__(self): return "{0} {1}
class Author(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=40)
email = models.EmailField()
age = models.IntegerField()
def __unicode__(self):
return "{0} {1} {2} {3} {4}".format(
self, self.first_name, self.last_name, self.email, self.age)
class Book(models.Model):
book_name=models.CharField(max_length=30)
publisher_name=models.CharField(max_length=40)
author=models.ForeignKey(Author)
def __unicode__(self):
return "{0} {1} {2}".format(
self.pk, self.book_name, self.publisher_name)
forms.py
class AuthorForm(ModelForm):
class Meta:
model = Author
BookFormset = inlineformset_factory(Author, Book,
fields=('book_name', 'publisher_name'), extra=1,
can_delete=False)
url.py是
admin.autodiscover()
urlpatterns = patterns('',
url('^$', index),
url('^index/$', index),
url('^addbook/$', addbook),
url('^book_detail/$', book_detail, 'book_summary'),
url('^editbook/(?P<book_id>\d+)/$', editbook) ,
url('^deletebook/(?P<book_id>\d+)/$',deletebook) ,
url(r'^admin/', include(admin.site.urls)),
)
admin.autodiscover()
urlpatterns=模式(“”,
url(“^$”,索引),
url(“^index/$”,索引),
url(“^addbook/$”,addbook),
url(“^book\u detail/$”、book\u detail、“book\u summary”),
url(“^editbook/(?P\d+/$”,editbook),
url(“^deletebook/(?P\d+/$”,deletebook),
url(r“^admin/”,包括(admin.site.url)),
)
我需要执行编辑和更新数据库中的行,我是通过使用单个表来完成的。但是使用两个表时会有一些混淆,即如何使用该特定id获取第二个表。我在此使用表单。您能帮助我在views.py中编写代码吗。我没有看到使用两个表进行相同操作的示例
感谢def更新手册(请求,手册id):
def update_book(request, book_id):
author = get_object_or_404(Author, pk=author_id)
form = AuthorForm(instance=author)
book_formset = BookFormset(instance=author)
if request.method == 'POST':
form = AuthorForm(request.POST, instance=author)
if form.is_valid():
author = form.save(commit=False)
book_formset = BookFormset(request.POST, instance=author)
if book_formset.is_valid():
author.save()
book_formset.save()
return redirect('/index/')
return render_to_response('updatebook.html',{
'form': form, 'formset': book_formset
},context_instance=RequestContext(request))
<div align="center">
<tr>
<form method="POST">
{% csrf_token %}
<h5>Author:</h5>
{{ form.as_p }}
<h5>Book:</h5>
{{ formset.as_p }}
<input type="submit" value="submit">
</form>
</tr>
</div>
author=get\u object\u或\u 404(author,pk=author\u id)
form=AuthorForm(实例=author)
book_formset=BookFormset(实例=作者)
如果request.method==“POST”:
form=AuthorForm(request.POST,instance=author)
如果form.is_有效():
author=form.save(commit=False)
book_formset=BookFormset(request.POST,instance=author)
如果book\u formset.is\u valid():
author.save()
book_formset.save()
返回重定向(“/index/”)
返回render\u to\u响应('updatebook.html'{
“表单”:表单,“表单集”:书本\u表单集
},context_instance=RequestContext(请求))
{%csrf_令牌%}
作者:
{{form.as_p}}
书:
{{formset.as_p}}
任何人都可以检查并告诉我一个小小的疑问,在author表中,没有author\u id字段,但在提到的代码中,author=get\u object\u或\u 404(author,pk=author\u id)author\u id不是一个字段,而是您需要在更新中传递的变量。因此,对象将知道哪些数据必须更新您的更新url还能够在该视图中传递id答案是正确的,但当我单击提交按钮时,它给出了“未找到页面”错误,对此有任何提示还记得id吗?你的url需要一个id,别忘了。