2017-09-08 3 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 

사용자의 프로필 템플릿 (I이 사용하려는 템플릿) :

{% 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 %}

템플릿에 변경. 즉, 간단히 말해서 나는 그들을 제대로 연결하지 못했습니다.