【发布时间】:2017-06-21 12:48:08
【问题描述】:
免责声明:在这方面还是很新的。
我已经成功建立并运行了一个记录攀岩的网站。我有一个功能表单,允许用户向目录提交新项目,但无法弄清楚如何将他们重定向到新创建的页面。这是我的代码:
("..." 代替我认为不相关且庞大的代码。如果您需要它,请告诉我!)
forms.py:
class PostForm(forms.ModelForm):
class Meta:
model = MyDB
fields = (...)
def save(self):
instance = super(PostForm, self).save(commit=False)
instance.slug = slugify (instance.name)
instance.save()
return instance
views.py:
def post_new(request):
things = MyDB.objects.order_by('name')
if request.method == "POST":
form = PostForm(request.POST)
if form.is_valid():
created_at = timezone.now()
updated_at = timezone.now()
form.save()
return render(request, 'DB.html', {
'things': things,
})
else:
form = PostForm()
return render(request, 'things/submit_thing.html', {'form': form})
models.py:
from django.db import models
class MyDB(models.Model):
...
slug = models.SlugField(unique=True)
和 urls.py:
url(r'^things/(?P<slug>[-\w]+)/$', views.thing_detail, name='thing_detail'),
url(r'^post/new/$', views.post_new, name='post_new'),
现在我只是让它重定向到一个静态 html 页面,因为我不知道如何让它加载新创建的页面。我试过使用重定向功能,但不确定如何将新创建的页面指定为目标。
谢谢!
编辑:这是工作代码:
from django.shortcuts import render, redirect, reverse
def post_new(request):
things = MyDB.objects.order_by('name')
if request.method == "POST":
form = PostForm(request.POST)
if form.is_valid():
created_at = timezone.now()
updated_at = timezone.now()
thing = form.save()
return redirect(reverse('thing_detail', kwargs={'slug': thing.slug})
)
else:
form = PostForm()
return render(request, 'things/submit_thing.html', {'form': form})
【问题讨论】:
-
你想把用户重定向到哪里?
-
到“名称”字段的 slugified 版本。例如,如果他们提交了名为“Bob is great”的表单,它将重定向到 /things/bob-is-great/,这是他们刚刚提交的数据的生成视图
-
将
form.save()的结果赋值给一个变量,例如instance = form.save()。然后你可以使用instance.slug。
标签: python django forms redirect