1

当我尝试使用其他表中的外键检索数据时,出现以下异常:

'User' object has no attribute 'UserFeed_set'

看法 :

def user_page(request, username):
    try:
        u = User.objects.get(username=username)
    except User.DoesNotExist:
        raise Http404(u'Requested user not found.')
    feeds = u.UserFeed_set.all()
    variables = RequestContext(request, {
        'username' : username,
        'feeds' : feeds
    })
    return render_to_response('user_page.html', variables)

模型.py:

from django.contrib.auth.models import User

class AllFeeds(models.Model):
    url = models.CharField(unique=True, max_length=40)

    def __unicode__(self):
        return self.url

class UserFeed(models.Model):
    user = models.ForeignKey(User)
    myfeeds = models.ForeignKey(AllFeeds)

    def __unicode__(self):
        return u'%s %s'%(self.user.username,self.link.url)
4

3 回答 3

1

如果您没有模型领域,它应该是可访问related_name的。(默认名称是)。ForeignKeyUserFeeduser.userfeed_setmodel.__name__.lower() + "_set"

如果您设置了releated_name,则该方法将被称为您指定的任何值。

于 2013-11-14T07:35:23.067 回答
1

这里的主要问题是你需要使用正确的相关名称格式,都是小写的;但是您的模型还有一些其他问题。

清理你的代码,你最终得到这个:

from django.shortcuts import get_object_or_404, render

def user_page(request, username):
    u = get_object_or_404(User, username=username)
    feeds = u.userfeed_set.all()
    variables = {
        'username' : username,
        'feeds' : feeds
    }
    return render(request, 'user_page.html', variables)

您的模型还需要一些编辑,因为您没有self.link.url

from django.contrib.auth.models import User

class AllFeeds(models.Model):
    url = models.URLField(unique=True, max_length=40)

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

class UserFeed(models.Model):
    user = models.ForeignKey(User)
    myfeeds = models.ForeignKey(AllFeeds)

    def __unicode__(self):
        return unicode('{0} {1}'.format(self.user.username, self.myfeeds.url))
于 2013-11-14T08:00:08.573 回答
0

据我所知,如果您有两个模型使用多对多关系,则可以使用 u.userfeed_set.all(),但正如您所说,您的模型使用一对一关系

于 2013-11-14T09:40:48.667 回答