Python Django:';str';对象没有属性';用户';

Python Django:';str';对象没有属性';用户';,python,django,decorator,Python,Django,Decorator,这是我的视图代码: @login_required def get_top(type): o = Work.objects.filter(types = "Fan Fiction").order_by("-date_updated")[:10] list = [] for o in o: l.title = o.title l.href = "/" + o.id list.append(l) return l @l

这是我的视图代码:

@login_required
def get_top(type):
    o = Work.objects.filter(types = "Fan Fiction").order_by("-date_updated")[:10]
    list = []
    for o in o:
        l.title = o.title
        l.href = "/" + o.id
        list.append(l)
    return l

@login_required
def main_home(request):
    fanfiction = get_top("ff")
    poetry = get_top("pw")
    originalwork = get_top("ow")
    return render_to_response("Main/main_home.html", {'STATIC_URL':STATIC_URL, "poetry":poetry, "fan":fanfiction, "original":originalwork})
这是模型的代码:

class Work(models.Model):
    title = models.CharField(max_length=30)
    summery = models.TextField()
    user = models.ForeignKey(User)
    date_published = models.DateField()
    date_updated = models.DateField()
    one_shot = models.BooleanField()
    completed = models.BooleanField()
    TYPES = (
        ('FF', 'Fan Fiction'),
        ('OF', 'Original Work'),
        ('PW', 'Poetry Work'),
        )
    types = models.CharField(max_length=2, choices=TYPES)
    fandom1 = models.ForeignKey(Book, blank = True, null= True, related_name='f_1')
    fandom2 = models.ForeignKey(Book, blank = True, null= True, related_name='f_2')
    def __unicode__(self):
    return self.title + '-' + self.user.email

这是错误:
'str'对象在“get\u top(“ff”)”处没有属性“user”

请删除
@login\u required
方法的装饰器

这试图做的是,
@login\u required
尝试验证该用户是否登录。这是试图在
ff
中找到
User
对象实例,它是
str
,因此是stacktrace。正常情况下,
@login\u required
请求
obj获取
用户
,但由于您没有在
获取顶部
中传递该信息,因此出现错误

我的建议是,您应该在
views.py
中维护一组特定的方法,这些方法链接到
url.py
中的API URL,其中一些可能需要
@login\u required
。其他一组方法是helper方法(如
get\u top
)。它们不会暴露于外部世界(因此不需要
@login\u required


如果必须在内部和外部公开
get_top
,那么
get_top
的第一个参数必须是
request
对象,然后是其他参数。

get_top不返回HttpResponse,因此Django无法正确应用@login\u required decorator(假设它返回一个具有.user属性的HttpResponse)

还建议添加一点,不建议使用
type
作为变量名,因为它是python内置函数。嘿@Mike,我的建议对你有帮助吗?