Отказ от ответственности: Все еще очень новый.Django Modelform Перенаправление на представленный формы
Мне удалось завести сайт и запустить каталоги скалолазания. У меня есть функциональная форма, которая позволяет пользователям отправлять новый элемент в каталог, но не смогли определить, как перенаправить их на вновь созданную страницу. Вот мой код:
(«...» вместо того, что я думаю, что не имеет никакого отношения и громоздкий код Дайте мне знать, если вам это нужно.!)
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-страницу, потому что я не могу понять, как заставить его загрузить вновь созданную страницу. Я попытался использовать функцию перенаправления, но не знаю, как назначить вновь созданную страницу в качестве адресата.
Спасибо!
Edit: Вот рабочий код:
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})
Адрес, куда вы хотите перенаправить пользователя. – arcegk
К удаленной версии поля «имя». Например, если они отправили форму с именем «Боб замечательно», она перенаправила бы на/things/bob-is-great /, который является сгенерированным представлением только что представленных данных. – Josh
Назначить результат формы. save() 'к переменной, например 'instance = form.save()'. Затем вы можете использовать 'instance.slug'. – Alasdair