MyPostsと呼ばれるメンバーとブログの2つのモデルがあります。 Facebookのプロフィールページのように見えるメンバー詳細ページがあり、そこにユーザーの投稿を掲載したいと思います。どうやってやるの?Django - 別のビューでブログ記事を一覧表示する
マイメンバーモデル:
class Member(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='members')
member_name = models.CharField(max_length=120)
member_adress = models.CharField(max_length=200)
.
.
slug = models.SlugField(max_length=140, unique=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()
ブログモデル:
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)
slug = models.SlugField(max_length=140, unique=True, blank=False, null=True)
def __str__(self):
return self.title
class Meta:
ordering = ['-publishing_date', 'id']
マイ詳細ページビュー:
def MemberDetailView(request,pk, slug):
try:
infos = Member.objects.get(pk=pk, slug=slug)
except Member.DoesNotExist:
raise Http404("Member does not exist")
post_list = MyPosts.objects.filter(user=self.request.user.id) # this gives a self error
return render(request, 'directory/member-detail.html', {'memberinfo':infos}, {'memberposts':post_list})
どのように私が見て、私のポストビューがを追加することができますそれらは同じ「メンバー詳細」ページにありますか?
ありがとうございます。しかし、私は "'User = request.user"を試してみると "' AnonymousUser 'オブジェクトが反復可能ではないというようなエラーを受けています。 「user」の代わりにuser = request.user.idを試してみると、空白のページが表示されます。私は自分のhtmlがいっぱいだが、dbから取り出されたコンテンツはない。私はそれが私がログインしたユーザーではなかったからだと思う。私がログインすると、「xyzを照会できません」というメッセージが表示されます。「Member」インスタンスである必要があります。投稿したユーザーがログインしても誰でも見ることができるようにするには – demyr
OKです。それは私のコンテンツを呼び出すためのタグを使用する私の間違いでしたが、反対に、かっこを塗りつぶす代わりに "MyPosts.objects.filter()"を使用すると良い結果が得られました。ただし、すべてのユーザーのすべての投稿が表示されます。私が訪問したプロフィールページのユーザーだけでなく、自分が所属する投稿ではなく... – demyr
ログインしているユーザーの代わりにメンバーの投稿を表示したい場合は、 'MyPosts.objects.filter(user = member ) '。オブジェクトをフィルタリングするために 'request.user'を使いたいのであれば、' login_required'デコレータを使って匿名ユーザのエラーを防ぐのが便利です。 – Alasdair