Требуется создать параметризованную ссылку из формы в Django
Требуется получить id(pk) только что созданного объявления с помощью формы и, с помощью этого, создать параметризованную ссылку для параметризованной html страницы в Django.
Может кто знает из вас как это сделать? Заранее огромное спасибо.
Вот модель (models.py):
class Bb(models.Model):
title = models.CharField(max_length=50, verbose_name='Tovar')
content = models.TextField(null=True, blank=True, verbose_name='Opisanie')
price = models.FloatField(null=True, blank=True, verbose_name='Cena')
published = models.DateTimeField(
auto_now_add=True,
db_index=True,
verbose_name='Opublikovano',
)
ps = models.TextField(null=True, blank=True, verbose_name='Po Skriptu')
rubric = models.ForeignKey(
'Rubric',
null=True,
on_delete=models.PROTECT,
verbose_name='Rubrika',
)
Вот форма (forms.py):
class BbForm(ModelForm):
class Meta:
model = Bb
fields = (
'title',
'content',
'ps',
'price',
'rubric',
)
Вот контроллер-класс (views.py):
class BbCreateView(CreateView):
template_name = 'bboard/create.html'
form_class = BbForm
success_url =
success_url отсутствует, потому что, мне надо в него передать параметризованную get ссылку из id(pk) только что созданного объявления.
Ответы (1 шт):
Автор решения: 5c0rp
→ Ссылка
Вам нужно реализовать метод get_absolute_url для модели Bb. success_url в BbCreateView указывать не нужно. Пример из документации:
def get_absolute_url(self):
from django.urls import reverse
return reverse('people.views.details', args=[str(self.id)])
Вот еще описание использования такого подхода.
urls.py
urlpatterns = [
path('api/v1/bb/', BbCreateView.as_view(), name='BbCreateView'),
...
]
models.py
from django.urls import reverse
class Bb(models.Model):
...
def get_absolute_url(self):
return reverse('BbCreateView', args=[str(self.id)])
views.py
class BbCreateView(CreateView):
template_name = 'bboard/create.html'
form_class = BbForm