2012-09-25 81 views
0

我有這樣的Django模型的領域:如何顯示M2M關係

#encoding:utf-8 
from django.db import models 
from django.contrib.auth.models import User 
from django.contrib import admin 

# Create your models here. 
class Profile(models.Model): 
    user = models.ForeignKey(User, unique=True, related_name='user') 
    follows = models.ManyToManyField(User, related_name='follows', symmetrical=False, blank=True) 
    bio = models.TextField(blank=True) 
    avatar = models.ImageField(upload_to='avatar', blank=True) 
    website = models.CharField(max_length=100, blank=True) 
    place = models.CharField(max_length=100, blank=True) 

    def __unicode__(self): 
     return unicode(self.user) 

admin.site.register(Profile) 

admin.autodiscover() 

然後,我有這樣的觀點:

def profile(request, user_id): 
    user = get_object_or_404(Profile, user=user_id) 
    return render_to_response('user_view.html', {'user':user,}) 

現在,user_view.html我顯示 '用戶' 數據(用戶名,頭像,網站等):

{{user.user_id}} 
{{user.user}} 
{{user.website}} 
{{user.avatar.url}} 

但是,我也需要顯示用戶名,頭像和我關注的用戶網站。我這樣做:

{% for element in user.follows.all %} 
    <a href="{{element.website}}">{{element.user}}</a> 
    <img src="{{element.avatar.url}} /> 
{% endfor %} 

但是,而不是顯示用戶的數據,它顯示了這一點:

<django.db.models.fields.related.RelatedManager object at 0x022F34F0> 

但是,如果我這樣做:

{% for element in user.follows.all %} 
    <p>{{element}}</p> 
{% endfor %} 

它完美地顯示用戶的名字,但我仍然無法顯示網站或頭像。我怎樣才能做到這一點?

+1

請編輯您的代碼來顯示什麼你真的嘗試過。 'user_data'稍後會在你的問題中使用,但它不會在聲明它的地方顯示。 – Steven

回答

1

我想你會嘗試

{% for element in user_data.follows.all %} 
    <p>{{element.username}}</p> 
    <p>{{element.profile.website}}</p> 
    <p>{{element.profile.avatar}}</p> 
{% endfor %} 

元素用戶的實例,而不是檔案的一個實例。 但你仍然可以通過編寫

element.profile 

檢索相關檔案實例,因爲它是一個一比一的關係(OneToOneField或ForeignKey的(唯一= TRUE))

+0

你是對的!那是我的錯誤。我只是將模型從'follow = models.ManyToManyField(User,related_name ='follow',symmetrical = False,blank = True)'改爲'following = models.ManyToManyField('self',related_name ='following',symmetrical =假,空白=真)「它現在完美。非常感謝! – lordzero0000