如何显示M2M关系

如何显示M2M关系

问题描述:

我有这样的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

我想你会尝试

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