繁体   English   中英

Django:“ str”对象没有属性“ user”

[英]Django: 'str' object has no attribute 'user'

这是我的视图代码:

@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' object has no attribute 'user'在“ get_top(“ ff”)”处'str' object has no attribute 'user'

请删除get_top方法的@login_required装饰器。

这是要执行的操作, @login_required尝试验证该用户是否已登录。 这试图在ff找到一个User对象实例,该实例是str因此是stacktrace。 通常, @login_requiredrequest obj获取User ,但是由于您没有在get_top传递该用户,因此出现错误。

我的建议是,您应该在views.py维护一组特定的方法,这些方法链接到urls.py的API url,其中一些可能需要@login_required 其他方法集是辅助方法(如get_top )。 这些不会暴露给外界(因此不需要@login_required )。

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

get_top不会返回HttpResponse,因此Django无法正确应用@login_required装饰器(假设它返回了具有.user属性的HttpResponse)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM