Django - посты.Пост.Нет - PullRequest
       0

Django - посты.Пост.Нет

1 голос
/ 05 апреля 2020

Я работаю над проектом django, и у меня есть 2 модели, которые выглядят так:

class Playlist(models.Model):
    user        = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE,related_name='playlist_user')
    name        = models.CharField(max_length=120)
    image       = models.ImageField(upload_to=upload_image_path)
    genre       = models.CharField(max_length=120,null=True,blank=True)
    track       = models.ManyToManyField('Post',related_name='playlist_track')

class Post(models.Model):
    user        = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE)
    title       = models.CharField(max_length=120)
    slug        = models.SlugField(unique=True)
    image       = models.ImageField(upload_to=upload_image_path)
    audiofile   = models.FileField(upload_to=upload_image_path,null=True)
    genre       = models.CharField(max_length=120,null=True,blank=True)

и это представление:

def userprofileview(request):
    own_tracks = Post.objects.filter(user=request.user)
    playlist_ = Playlist.objects.filter(user=request.user)
context = {
    'own_tracks':own_tracks,
    'playlist_':playlist_
}
return render(request,'userprofile.html',context)

, но когда я пытаюсь сделать запрос посты из плейлиста, как это:

{% for object in playlist_ %}
{{ object.track }}
{% endfor %}

Я получаю:

posts.Post.None

Спасибо за любые предложения

1 Ответ

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

Чтобы получить доступ к связанным объектам, вам нужно добавить .all в конце:

{% for object in playlist_ %}
    {% for <b>post</b> in object<b>.track.all</b> %}
        {{ <b>post.title</b> }}
    {% endfor %}
{% endfor %}

Чтобы избежать проблемы N + 1 , вы можете использовать .prefetch_related(..) [Django -doc] :

def userprofileview(request):
    own_tracks = Post.objects.filter(user=request.user)
    playlist_ = Playlist.objects.filter(user=request.user)<b>.prefetch_related('post')</b>
context = {
    'own_tracks':own_tracks,
    'playlist_':playlist_
}
return render(request,'userprofile.html',context)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...