通过使用inlineformset,我已经创建了一个createview,一切都很好,但是,我需要将用户重定向到创建的作者详细信息视图。
如何使用模型中的get_absolute_url获取作者ID 书吗?
我将在以下代码中解释我的所作所为。
首先,我有两个具有关联关系的模型:作者和书本。
php.ini
在这里,我有表单集。
class Author(models.Model):
description = models.CharField("Description", max_length=150)
author = models.ForeignKey(
"Book",
verbose_name=_("Book"),
on_delete=models.PROTECT
)
class Meta:
verbose_name = _("Author")
verbose_name_plural = _("Authors")
class Book(models.Model):
name = models.CharField("Book Name", max_length=150)
class Meta:
verbose_name = _("Book")
verbose_name_plural = _("Books")
def get_absolute_url(self):
return reverse('author-detail', args=(need author pk here,))
在这里,我有我的看法。
AuthorFormSet = forms.inlineformset_factory(
Book,
Author,
form=AuthorForm,
fields = ['description'],
extra=2
)
感谢您的时间。
答案 0 :(得分:0)
建模看起来有点“偏离”。在这里,您在ForeignKey
模型中制作了一个Author
(指向该外键名为Book
),并author
。因此,这意味着根据您的建模。 Author
精确地写成一个Book
,而Book
可以被零个,一个或多个作者写成。
其余的表单和视图也似乎将两者互换。例如,您使用模型BookAuthorCreateView
制作了Book
,但是您似乎在这里创建了Author
对象。如果您目前不太关心这些关系,并尝试分别为Book
和Author
实现表单,那么这可能会有所帮助。
就像您想要反向关系一样,因为Book
有一个作者。您可以这样写:
class Author(models.Model):
description = models.CharField("Description", max_length=150)
# no author foreign key
class Meta:
verbose_name = _("Author")
verbose_name_plural = _("Authors")
class Book(models.Model):
name = models.CharField("Book Name", max_length=150)
author = models.ForeignKey(
'Author',
verbose_name=_('Author'),
on_delete=models.PROTECT
)
class Meta:
verbose_name = _("Book")
verbose_name_plural = _("Books")
def get_absolute_url(self):
return reverse('author-detail', args=(self.author_id,))
然后您可以使用self.author_id
来检索相关Author
对象的主键。
将Book
,author
的详细信息页面而不是本书本身的名称指定为“ 模型URL ”仍然有点奇怪。