2017-09-08 69 views
1

所以我想在兩個應用程序視圖中的兩個不同應用程序中顯示兩個模型。具體來說,我試圖在其個人資料頁面上顯示用戶的帖子。然而,我一直無法弄清楚,沒有發現任何工作。這是我的代碼,請看看。Django,在視圖中顯示多個模型

飼料應用車型:

from django.db import models 
from django.core.urlresolvers import reverse 
from django.conf import settings 

from django.contrib.auth import get_user_model 
User = get_user_model() 

# Create your models here. 
class UserPost(models.Model): 
    author = models.ForeignKey(User,related_name='userpost',null=True) 
    post_date = models.DateTimeField(auto_now_add=True) 
    title = models.CharField(max_length=150,blank=False) 
    post_body = models.TextField(max_length=1000,blank=False) 

    def publish(self): 
     self.save() 

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

    def __str__(self): 
     return self.title 

不知道如果你需要看到這一點,但這裏是用戶應用程序的模型:

from django.db import models 
from django.utils import timezone 
from django.contrib.auth.models import User 
from users.choices import * 

# Create your models here. 
class UserProfileInfo(models.Model): 
    user = models.OneToOneField(User) 

    join_date = models.DateTimeField(default=timezone.now) 
    profile_pic = models.ImageField(upload_to='profile_pics',blank=True) 
    location = models.CharField(max_length=150) 
    title = models.CharField(max_length=250) 
    user_type = models.IntegerField(choices=USER_TYPE_CHOICES,default=1) 
    website = models.URLField(max_length=100,blank=True) 
    about = models.TextField(max_length=500,default='about') 
    twitter = models.CharField(max_length=50,blank=True) 
    dribbble = models.CharField(max_length=50,blank=True) 
    github = models.CharField(max_length=50,blank=True) 

    def __str__(self): 
     return self.user.username 

用戶的應用程序查看,我想這兩個模型顯示:

from django.shortcuts import render,get_object_or_404 
from users.forms import UserForm,UserProfileForm 
from users.models import UserProfileInfo 
from feed.models import UserPost 

from django.contrib.auth import authenticate,login,logout 
from django.http import HttpResponseRedirect, HttpResponse 
from django.core.urlresolvers import reverse 
from django.contrib.auth.decorators import login_required 

from django.contrib.auth.mixins import LoginRequiredMixin 
from django.views.generic import (TemplateView,ListView, 
            DetailView,CreateView, 
            UpdateView,DeleteView) 

# Create your views here. 
class UserProfileView(DetailView): 
    model = UserProfileInfo 
    template = 'users/userprofile.html' 

    def get_context_data(self, **kwargs): 
     context = super(UserProfileView, self).get_context_data(**kwargs) 
     context['user-feed'] = UserPost.objects.all() 
     return context 

用戶配置文件模板(我想用這個與模板):

{% extends "base.html" %} 

{% block content %} 

    <div class="sidebar-userinfo"> 
     <img class="profile-pic" src="{{ userprofileinfo.profile_pic.url }}"> 
     <h2>{{ userprofileinfo.username }}</h2> 
     <p class="accent">Score:</p> 
     <p>Score goes here</p> 
     <form> 
      <button class="btn" type="submit">Follow</button> 
     </form> 

     <p class="accent">Title:</p> 
     <p class="profile-info">{{ userprofileinfo.title }}</p> 

     <p class="accent">Website:</p> 
     <p class="profile-info">{{ userprofileinfo.website }}</p> 

     <p class="accent">I'm a:</p> 
     {% if request.user.userprofileinfo.user_type == 1 %} 
      <p class="profile-info">Designer</p> 
     {% elif request.user.userprofileinfo.user_type == 2 %} 
      <p class="profile-info">Designer</p> 
     {% else %} 
      <p class="profile-info">Both</p> 
     {% endif %} 

     {% if userprofileinfo.about %} 
      <p class="accent">About Me:</p> 
      <p class="profile-info">{{ userprofileinfo.about }}</p> 
     {% endif %} 

     <p class="accent">Member Since:</p> 
     <p class="profile-info">{{ userprofileinfo.join_date }}</p> 

     {% if userprofileinfo.location %} 
      <p class="accent">Location:</p> 
      <p class="profile-info">{{ userprofileinfo.location }}</p> 
     {% endif %} 

     {% if userprofileinfo.twitter %} 
      <p class="accent">Twitter:</p> 
      <p class="profile-info">{{ userprofileinfo.twitter }}</p> 
     {% endif %} 

     {% if userprofileinfo.dribbble %} 
      <p class="accent">Dribbble:</p> 
      <p class="profile-info">{{ userprofileinfo.dribbble }}</p> 
     {% endif %} 

     {% if userprofileinfo.github %} 
      <p class="accent">Git Hub:</p> 
      <p class="profile-info">{{ userprofileinfo.github }}</p> 
     {% endif %} 
    </div> 

    <div class="content-right"> 
     {% include 'feed/userpost_list_inner.html' %} 
    </div> 

{% endblock %} 

上面的包容性陳述導致這個文件:

{% for post in userpost_list %} 
    <div class="post"> 
     <h2 class="post-title">{{ userpost.post.title }}</h2> 
     <p class="accent">{{ post.author }}</p> 
     <p class="accent">{{ post.post_date }}</p> 
     <p class="body">{{ post.post_body }}</p> 
    </div> 
{% endfor %} 

回答

0

玩了之後多一點我能得到它在我的問題使用的代碼工作。我是用user-feed我的上下文名稱的位置:

context['user-feed'] = UserPost.objects.all()

而問題是,我是不是在我的模板調用正確的名稱:

{% for post in userpost_list %}

所以這是不匹配起來。我的觀點改變了上下文命名user_post,然後在模板中改變它,以及

{% for post in user_post %}

這解決了這一問題。所以簡而言之,我只是沒有正確地連接它們。