Как я могу получать сообщения, связанные с пользователем в Django?

#django #django-models #django-views

Вопрос:

 #user/application mdodels.py
class ShowProfilePageView(DetailView):
    model=User
    template_name="users/profile.html"
    paginate_by = 5

    def get_context_data(self, *args, **kwargs):
        users=User.objects.all()
        nested_posts = {}
        context = super(ShowProfilePageView,self).get_context_data(*args, **kwargs)
        page_user = get_object_or_404(User, id=self.kwargs['pk'])
        context['page_user'] = page_user

        return context
#post model
    class Posts(models.Model):
        choices1 = Category.objects.all().values_list('name','name')
        choice_list=[]
        for item in choices1:
            choice_list.append(item)
        default2="Words are powerful, and, when used well, they can"
        default1= "Words are powerful, and, when used well, they can incite people to both good and evil. While everyone has the right to say whatever he or she wants, those with influence over wants, those with influence over wants, those with influence over and thats"
category = models.CharField(max_length =30, choices = choice_list, default=choice_list[1])
        title= models.CharField(default=default2, max_length=50)
        content= models.TextField(max_length=2555,default=default1)
        data_posted =models.DateTimeField(default=timezone.now)
        author = models.ForeignKey(User, on_delete=models.CASCADE)
        header_image = models.ImageField(null=True, default ="default.jpg", upload_to="images/")
        snippet = models.TextField(default=default2, max_length=255)
        likes = models.ManyToManyField(User, related_name='blogpost_like')



        def number_of_likes(self):
            return self.likes.count()

        def __str__(self):
            return self.title

        def save(self, *args, **kwargs):
            super(Posts, self).save(*args, **kwargs)

            header_image= Image.open(self.header_image.path)
            if header_image.height  > 300 or header_image.width > 300:
                output_size = (500,300  )
                header_image.thumbnail(output_size)
                header_image.save(self.header_image.path)
        
        @property
        def number_of_comments(self):
            return BlogComment.objects.filter(blogpost_connected=self).count()

        def get_absolute_url(self):
    return reverse ('home')
 

Я могу получить id , но не posts то, что связано с этим id . то, что я могу получить, — это имя пользователя, описание профиля и изображение профиля. class Posts он отвечает за сбор информации и хранение сообщений. Я хотел бы иметь возможность вызывать сообщения, чтобы ShowProfilePageView я мог показывать как User информацию, так и сообщения, связанные с этим пользователем. В настоящее время я могу называть User информацию, но не сообщения, связанные с пользователем

 #tempalte Profile.html
<div class="content-section">
  <div class="media">
    <img class="rounded-circle account-img" src="{{ page_user.profile.image.url }}">
    <div class="media-body">
      <h2 class="account-heading">{{ page_user }}</h2>
      <h3 class="text-secondary">{{ page_user.profile.profile_description }}</h3>
        
    </div>
  </div>
 

Комментарии:

1. можете ли вы добавить модели?

2. конечно! надеюсь, то, что я добавил, поможет

Ответ №1:

Я нашел ответ. Я уверен, что есть миллион способов сделать это, но, похоже, это сработало.

  #from users.models
class ShowProfilePageView(DetailView):
model=User
template_name="users/profile.html"
paginate_by = 5

def get_context_data(self, *args, **kwargs):
    users=User.objects.all()
    nested_posts = {}
    context = super(ShowProfilePageView,self).get_context_data(*args, **kwargs)
    page_user = get_object_or_404(User, id=self.kwargs['pk'])
    context['page_user'] = page_user
    posts=Posts.objects.filter(author=page_user).order_by('-data_posted')
    context['posts'] = posts
    return context