我有会员模型和博客模型。我的博客模型叫做 MyPosts 。 MyPosts用户字段是会员的FK。 要查看用户的详细信息页面,我的网址类型如下:
url(r'member-detail/(?P<pk>\d+)(?:/(?P<slug>[\w\d-]+))?/$', views.MemberDetailView.as_view(), name='member-detail'),
对于博文,我有以下内容:
url(r'my-posts/$',views.postlistall.as_view(), name='my-posts'),
现在,我如何安排 my-posts url 查看用户的帖子?
我的意思是,会员详细信息视图的网址是:http://127.0.0.1:8000 / directory / membership -detail/12 / michael /
但我的帖子链接是:http://127.0.0.1:8000 / directory / my-post /
如何将其转换为http://127.0.0.1:8000/directory/12/michael/my-posts/或类似的内容,这可能是最好的?
另外,他们有两个不同的视图和模板。如何在他/她的详细信息页面上显示用户的最后5个帖子。我在结合2个观点时失败了。
请求更新
我的模特:
class Member(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='members')
member_name = models.CharField(max_length=120)
member_lastname = models.CharField(max_length=120)
member_address = models.CharField(max_length=200, blank=True, null=True)
member_spoken_language = models.CharField(max_length=120, blank=True, null=True)
etc..
def __str__(self):
return self.member_name
def get_absolute_url(self):
return reverse('memberships:dashboard')
def _get_unique_slug(self):
slug = slugify(self.member_name)
unique_slug = slug
num = 1
while Member.objects.filter(slug=unique_slug).exists():
unique_slug = '{}-{}'.format(slug, num)
num += 1
return unique_slug
def save(self, *args, **kwargs):
if not self.slug:
self.slug = self._get_unique_slug()
super().save()
MyPosts模型:
class MyPosts(models.Model):
user = models.ForeignKey(Member, on_delete=models.CASCADE, blank=False, null=True, related_name='postcreator')
title = models.CharField(max_length=120)
content = models.TextField(max_length=240,)
publishing_date = models.DateTimeField(auto_now_add=True)
update_date = models.DateTimeField(auto_now=True)
def __str__(self):
return self.title
class Meta:
ordering = ['-publishing_date', 'id']
我的观点:
class MemberDetailView(generic.DetailView):
model= Member
template_name = 'directory/member-detail.html'
def get_queryset(self):
return Member.objects.all()
class postlistall(generic.ListView):
template_name = 'directory/my-posts.html'
context_object_name = 'post_list'
paginate_by = 10
def get_queryset(self):
return MyPosts.objects.filter(user=self.request.user.id)