Django:我可以以相同的形式使用 CreateView 和 DeleteView 吗?
Posted
技术标签:
【中文标题】Django:我可以以相同的形式使用 CreateView 和 DeleteView 吗?【英文标题】:Django : Can I use CreateView and DeleteView in same form? 【发布时间】:2013-02-13 20:49:16 【问题描述】:我想以相同的形式显示两个按钮,第一个按钮用于删除对象,第二个按钮用于创建对象。
例如,我想创建简单的模型,例如:
models.py:
class UrlStatus_Proxy(models.Model):
urls = models.URLField(u'Site URL', max_length=100, null=True, unique=True)
status_url = models.CharField(u'Site', max_length=20, choices=STATUS_URL)
urls.py
url(r'^url_status/$',ProxyUrlCreateView.as_view(model=UrlStatus_Proxy,
get_success_url=lambda: reverse('proxy_url_status'),template_name='proxy_url_status.html'), name='proxy_url_status'),
proxy_url_status.html
<form action="" method="post">
form.as_p
<input type="submit" name="delete" id="delete">
<input type="submit" name="add" id="add">
</form>
如果我在数据库中没有对象,那么什么都不做,只是从模型中显示表单,您只有一个选项可以在数据库中添加新对象。
如果我在数据库中有对象,则列出像表这样的对象,在表中我有一个复选框字段。当我检查其中一个对象并单击“删除”按钮时,我想删除该对象。
在第二种情况下,如果我从对象填充输入字段并按下按钮“添加”,我想在基础中添加对象。
我该怎么做?
【问题讨论】:
【参考方案1】:首先将所有现有对象添加到 CreateView 的上下文中,然后更新 HTML 模板以将它们呈现为表单上方的表格。然后创建一个 DeleteView 并将一个 URL 映射到它。
网址
url(r"^url_status/$",
ProxyUrlCreateView.as_view(),
name="proxy_url_status"),
url(r"^url_status/(?P<pk>\d+)/delete/?$",
DeleteProxyURLView.as_view(),
name="delete_proxy"),
观看次数
from django.views.generic import DeleteView
from django.core.urlresolvers import reverse
# add existing objects to the context, making them available to the template
class ProxyUrlCreateView(CreateView):
model = UrlStatus_Proxy
template_name = "proxy_url_status.html"
def get_success_url(self):
return reverse("proxy_url_status")
def get_context_data(self, **kwargs):
kwargs["object_list"] = UrlStatus_Proxy.objects.all()
return super(ProxyUrlCreateView, self).get_context_data(**kwargs)
class DeleteProxyURLView(DeleteView):
model = UrlStatus_Proxy
def get_success_url(self):
"""
Redirect to the page listing all of the proxy urls
"""
return reverse("proxy_url_status")
def get(self, *args, **kwargs):
"""
This has been overriden because by default
DeleteView doesn't work with GET requests
"""
return self.delete(*args, **kwargs)
模板
<table>
% for proxy_url in object_list %
<tr>
<td> proxy_url.urls </td>
<td><a href="% url delete_proxy %">Delete</a></td>
</tr>
% endfor %
</table>
<form action="" method="post">
form.as_p
<input type="submit" name="add" id="add">
</form>
【讨论】:
嗯.. 你能不能给我写一点代码,因为我是新的 django 程序员,我不明白你给我写了什么。 好的。我做到了,现在如何根据我按下的按钮创建/删除对象? 啊,好吧,我误解了这个问题。我上面提供的代码将显示现有对象的表格,每个对象旁边都有一个“删除”链接。 如果您仍在使用复选框删除按钮路线,我建议您使用 javascript 执行此客户端(以处理多个对象的删除)或结合 @ 查看模型表单集987654321@包裹。 是的,我有用于检查所有复选框的 jquery 功能,但我不知道在这种情况下如何实现提交按钮。 ;)以上是关于Django:我可以以相同的形式使用 CreateView 和 DeleteView 吗?的主要内容,如果未能解决你的问题,请参考以下文章
如何以编程方式为 Django 中的给定模型生成 CREATE TABLE SQL 语句?
Django 测试 - 打印一系列 n 次相同测试的所有测试失败