简体   繁体   中英

Django Many-to-Many Accessing both Models

I'm looking to build a small 'Twitter style' site using Django to get to grips with things and have decided to try and allow multiple users edit each post (eventually based on permissions). Now what I'm struggling with is accessing each user's posts. Below is the code for my model, view and template which shows "There aint no post here" for all users. I'm looking to be able to show all posts that the user has and don't seem to be getting anywhere:

models.py

from django.db import models

class User(models.Model):
    username = models.CharField(max_length = 200)
    email = models.EmailField(max_length = 75)
    password = models.CharField(max_length = 64)
    created_date = models.DateTimeField('date created')

    def __unicode__(self):
        return self.username

    class Meta:
        ordering = ('created_date',)


class Post(models.Model):
    users = models.ManyToManyField(User)
    title = models.CharField(max_length = 300)
    post = models.TextField()
    posted_date = models.DateTimeField('date created')
    votes = models.IntegerField()

    def __unicode__(self):
        return self.title

    class Meta:
        ordering = ('posted_date',)

views.py

from django.shortcuts import render, get_object_or_404
from django.http import HttpResponse

from users.models import User, Post

def index(request):
    latest_user_list = User.objects.order_by('username')[:5]
    context = {'latest_user_list': latest_user_list}
    return render(request, 'users/index.html', context)

def detail(request, user_id):
    user = get_object_or_404(User, pk=user_id)
    post_list = Post.objects.filter(id == user.id)  
    return render(request, 'users/detail.html', {'user': user, 'post': post_list})

urls.py

from django.conf.urls import patterns, url

from users import views

urlpatterns = patterns('',
    url(r'^$', views.index, name='index'),
    url(r'^(?P<user_id>\d+)/$', views.detail, name='detail'),
)

(template) - detail.html

<h1>{{ user.username }}</h1>
{% if post_list %}
    <ul>
    {% for post in post_list%}
        <li>{{ post.title }}</li>
    {% endfor %}
    </ul>
{% else %}
    <p> There aint no posts here </p>
{% endif %}

您传递给模板的变量称为post not post_list

Change the name for the list object in your view.

def detail(request, user_id):
    user = get_object_or_404(User, pk=user_id)
    post_list = Post.objects.filter(id == user.id)  
    return render(request, 'users/detail.html', {'user': user, 'post_list': post_list})

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM