2011-09-05 120 views
14

我要创造新的模式,是这样的:Django的 - 外键的用户模型

user_name = models.ForeignKey(u"Username", User), 

,但是当我尝试执行syncdb,我收到此错误信息:

"AttributeError: 'unicode' object has no attribute '_meta'"

当我看在一些教程中,一切似乎都与我的模型一样,并且从未提及“_meta”的问题。

+1

我终于找到了。这是我愚蠢的错误。我有另一个模型:class Meta:verbose_name = smart_encode(u“something)。对不起,我感谢你们两位! – Meph

回答

22

你只是想:

from django.contrib.auth.models import User 

class MyModel(models.Model): 
    ... 
    user = models.ForeignKey(User) 
    ... 
+0

这正是我想要的和我所做的,但是这个解决方案引发了我在问题中提到的AttributeError。 – Meph

+1

@Meph你能看出你有什么和Joe有什么区别吗?提示:看看ForeignKey的第一个参数 –

+0

@DanielRoseman:我可以,但是没关系,与Joes解决方案的错误 – Meph

28

一个更安全的方式做,这是从设置文件中使用AUTH_USER_MODEL

例子:

from django.db import models 
from django.conf import settings 

class Article(models.Model): 
    headline = models.CharField(max_length=255) 
    article = models.TextField() 
    author = models.ForeignKey(settings.AUTH_USER_MODEL) 

默认情况下settings.AUTH_USER_MODELdjango.contrib.auth.models.User不需要你做任何事情。

该方法的优势是即使您未经修改就使用自定义用户模型,您的应用程序仍将继续工作。

欲了解更多关于如何使用自定义用户模型的信息check out this part of the Django docs

+0

是否可以限制外键?那么如果我只想让外键与一组用户相关呢? –