我需要在Django中创建一个博客,我有一个Blog
类,声明如下:
models.py
class Blog(models.Model):
name = models.CharField(max_length=200, help_text='Enter name')
author = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True)
User
类是一个预定义的Django类。
正如你所看到的,对于Blogger,我没有创建一个类,而是使用了Django class User
的默认类。在模板blog_list.html
中,我使用以下行显示博客作者,并链接到作者页面:
blog_list.html
<a href="/blog/blogger/{{ blog.author.id }}">{{blog.author.first_name}} {{blog.author.last_name}}</a>
wiews.py
class BlogListView(generic.ListView):
model = Blog
ordering = ['-date']
paginate_by = 5
class BloggerDetailView(generic.DetailView):
model = User
url.py
urlpatterns = [
path('', views.index, name='index'),
path('blog/<int:pk>', views.BlogDetailView.as_view(), name='blog-detail'),
path('blogs/', views.BlogListView.as_view(), name='blogs'),
path('blogger/<int:pk>', views.BloggerDetailView.as_view(), name='blogger-detail'),
]
我的问题是如何声明一个absolute_url
为blog.author
不使用手动构造的/blog/blogger/{{ blog.author.id }}
?
1条答案
按热度按时间w41d8nur1#
你可以创建一个 * 代理模型 * [Django-doc],这不是一个新的(真实的)模型。在幕后,它使用
User
模型,但它将其转换为Author
对象,我们可以向该Author
对象添加逻辑:然后使用
ForeignKey
中的代理模型:然后在模板中用途: