我对MVC和MTV的概念有点陌生,我正在努力学习pythondjango。我想使图书目录,必须有添加和删除功能。我试图遵循最佳实践和通用视图,但最后有点卡住了,我觉得我错过了一些非常小的东西,但我不能找出它-说实话,我现在非常疲惫,我没有太多的时间。这是我的密码: 型号:
class Books(models.Model):
title = models.CharField(max_length=200)
author = models.CharField(max_length=200)
isbn = models.CharField(max_length=200)
pages = models.IntegerField(default=0)
def __unicode__(self):
return self.title
class BooksForm(ModelForm):
class Meta:
model = Books
视图:
# coding: utf-8
from django.core.urlresolvers import reverse_lazy
from django.views.generic import ListView, UpdateView, CreateView, DetailView
from models import Book
class BooksDetailView(DetailView):
model = Book
template_name = "books_portal/details.html"
class BooksCreateView(CreateView):
model = Book
template_name = "books_portal/add.html"
success_url = reverse_lazy('books_portal')
class BooksUpdateView(UpdateView):
model = Book
template_name = "books_portal/add.html"
success_url = reverse_lazy('books_portal')
class BooksListView(ListView):
model = Book
context_object_name = 'books_list'
template_name = "books_portal/index.html"
def get_queryset(self):
return Book.objects.order_by('author')[:5]
模板: 添加.html你知道吗
{% extends "books_portal/base.html" %}
{% block title %}Add books{% endblock %}
{% block extracss %}
<style>
.top-buffer { margin-top:20px; }
.bs-docs-nav { background-color: #563d7c; }
</style>
{% endblock extracss %}
{% block content %}
<form action="" method="post" class="form-horizontal" role="form">{% csrf_token %}
<div class="row top-buffer">
<div class="col-md-1">
{{form.title.label_tag}}
<input type="text" value="" class=""/>
</div>
</div>
<div class="row top-buffer">
<div class="col-md-1">
{{form.author.label_tag}}
<input type="text" value="" class=""/>
</div>
</div>
<div class="row top-buffer">
<div class="col-md-2 col-md-offset-1">
<input type="submit" value="Save" class="btn btn-primary btn-lg"/>
</div>
</div>
</form>
{% endblock %}
你知道吗基本.html你知道吗
<!DOCTYPE html>
<html>
<head>
<title>{% block title %}{{title|default:"Book Library"}}{% endblock %}</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
{% block extracss %}{% endblock extracss %}
</head>
<body>
<div class="container">
<div class="navbar-header">
<a href="{% url 'books_portal' %}" class="navbar-brand">Books Portal</a>
</div>
{% block content %}
{% endblock %}
</div>
{% block extrajs %}{% endblock extrajs %}
</body>
</html>
你知道吗详细信息.html你知道吗
{% extends "books_portal/base.html" %}
{% block title %}Details{% endblock %}
{% block extracss %}
<style>
.top-buffer { margin-top:20px; }
.bs-docs-nav { background-color: #4CD085; }
</style>
{% endblock extracss %}
{% block content %}
<div class="row top-buffer">
<div class="col-md-1">
<strong>Title:</strong>
</div>
<div class="col-md-2">
{{book.title}}
</div>
</div>
<div class="row top-buffer">
<div class="col-md-1">
<strong>Author:</strong>
</div>
<div class="col-md-2">
{{book.author}}
</div>
</div>
<div class="row top-buffer">
</div>
<div class="row">
<div class="col-md-1 col-md-offset-1 text-center"><a href="{% url 'books_portal' %}" class="btn btn-primary btn-lg">OK</a></div>
</div>
{% endblock %}
你知道吗索引.html你知道吗
{% extends "books_portal/base.html" %}
{% block title %}Collection of books{% endblock %}
{% block extracss %}
<style>
.top-buffer { margin-top:20px; }
.bs-docs-nav { background-color: #563d7c; }
</style>
{% endblock extracss %}
{% block content %}
<table class="table table table-hover">
<tr>
<th class="text-center">Title</th>
<th class="text-center">Author</th>
<th class="text-center">Edit</th>
</tr>
{% for book in books_list %}
<tr>
<td class="text-center"><a href="{% url 'books_details' pk=book.id%}">{{ book.title }}</a></td>
<td class="text-center">{{ book.author }}</td>
<td class="text-center"><a href="{% url 'books_edit' pk=book.id%}" class="btn btn-default">Delete</a></td>
</tr>
{% endfor %}
</table>
<div class="row">
<div class="col-md-2 col-md-offset-5 text-center"><a href="{% url 'books_add' %}" class="btn btn-primary btn-lg">Add</a></div>
</div>
{% endblock %}
目前我不能添加或删除任何书籍,任何帮助将不胜感激。非常感谢。你知道吗
我已经剪贴了你所有的代码,还有一个相关的网址.py,进入一个新项目。最直接的问题是,你没有显示任何形式的错误在你的添加.html. 您只需在模板的顶部添加
{{ form.errors }}
。你知道吗一旦您完成了,您将看到实际的问题:您在创建图书时没有提供所有相关字段。实际上,Django看不到任何字段,因为您没有给出任何inputs
name
属性。实际上,您不应该手动创建input
元素:您应该让Django这样做,因为这样在重新显示有错误的表单或编辑现有书籍时,它还负责用现有值预填充字段。应该是这样的:还有一个突出的问题是,您没有包括
isbn
或pages
字段,而您的模型是根据需要处理这些字段的。您可以在模型中将它们设置为blank=False
,或者在ModelForm中使用exclude
列表。无论哪种方式,您都需要在pages
的model字段中使用null=False
。你知道吗当然,也可以将它们添加到表单中。老实说,在学习过程中,现在最简单的方法就是用
{{ form.as_p }}
替换<form>
标记中的所有HTML,这样Django就可以为您输出所有内容。你知道吗相关问题 更多 >
编程相关推荐