Не удается получить подробный вид сообщения в проекте социальной сети - PullRequest
0 голосов
/ 16 апреля 2020

Я строю простую социальную сеть в django.

В «доме» моего соцсети у меня есть список всех сообщений, опубликованных всеми пользователями, с указанием автора и даты публикации. Дата публикации имеет ссылку на URL-адрес, который должен возвращать подробный вид определенной c публикации, опубликованной пользователем.

Однако, когда я нажимаю на нее, она отображает список всех опубликованных публикаций. его автором (это также работает, когда я нажимаю на ссылку автора сообщения).

Так что оба

www.mysocial.com/posts/by/ciccio/7/

и

www.mysocial.com/posts/by/ciccio/

перенести меня на ту же страницу, которая является списком сообщений ciccio.

Я собираюсь показать urls.py, views. py и models.py, которые все содержатся в моем приложении "posts" (myproject> posts)

Вот мой urls.py

# shows all user posts
url(r'by/(?P<username>[-\w]+)', 
views.UserPosts.as_view(), 
name='for_user'),

# shows specific post
url(r'by/(?P<username>[-\w]+)/(?P<pk>\d+)/$', 
views.PostDetail.as_view(), 
name='single'),

my views.py

class PostList(SelectRelatedMixin, generic.ListView):
    model = Post
    select_related = ('user', 'group')

class UserPosts(generic.ListView):
    model = models.Post
    template_name = 'posts/user_post_list.html'

    def get_queryset(self):
        try:
            #prende i post fatti dal'username che è lo stesso di quello che è loggato per guardarli
            self.post_user = User.objects.prefetch_related('posts').get(username__iexact=self.kwargs.get('username'))

        except User.DoesNotExist:
            raise Http404

        else:
            return self.post_user.posts.all()

    def get_context_data(self,**kwargs):
        context = super().get_context_data(**kwargs)
        context['post_user'] = self.post_user
        return context

class PostDetail(SelectRelatedMixin, generic.DetailView):
    model = models.Post
    select_related = ('user', 'group') #group senza apostrofo?

    def get_queryset(self):
        queryset = super().get_queryset()
        return queryset.filter(
            user__username__iexact=self.kwargs.get('username'),
            # maybe smth is needed here?
            )

my models.py

User = get_user_model()


# Create your models here.

class Post(models.Model):
    user = models.ForeignKey(User, related_name="posts", on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now=True)
    message = models.TextField()
    message_html = models.TextField(editable=False)


    group = models.ForeignKey(Group, related_name="posts", null=True, blank=True, on_delete=models.CASCADE)

    def __str__(self):
        return self.message

    def save(self, *args, **kwargs):
        self.message_html = m.html(self.message)
        # in questo modo quando si fa un markdon si mette un link nel loro post
        super().save(*args, **kwargs)

    def get_absolute_url(self):
        return reverse('posts:single', kwargs={'username':self.user, 'pk':self.pk})

    class Meta:
            ordering = ['-created_at']
            unique_together = ['user', 'message'] 

мой шаблон с указанием автора и даты публикации сообщения:

    <span class="username">
        <!--  mi porta a tutti i post fatti da quell'user -->
        <a href="{% url 'posts:for_user' username=post.user.username %}">@{{ post.user.username }}</a>
    </span>

    <a> – </a>

    <!-- il time tag posta il tempo -->
    <time class="time">
    <a href="{% url 'posts:single' username=post.user.username pk=post.pk %}">{{ post.created_at }}</a>

    </time>

Модель "Пользователь" - django модели по умолчанию. Пользователь

Проблема должна быть в представлении PostDetail, так как я убедился, что, нажав на URL, мой шаблон показывает правильный пост pk (post.pk)

Возможно, фильтр м в поисках? смотри мой # комментарий

1 Ответ

0 голосов
/ 17 апреля 2020

A /$ отсутствовал в конце первого URL:

url(r'by/(?P<username>[-\w]+)/$', 
    views.UserPosts.as_view(), 
    name='for_user'),

Но я до сих пор не могу понять, как URL-адрес, используемый для отображения представления, отображающего сообщения всех пользователей, влияет на поведение URL, который должен показывать только определенный c пост.

...