0

对于我的项目(Django 1.5),我设置了两个应用程序,一个称为帐户来处理身份验证,另一个称为配置文件来处理所有配置文件操作。我为帐户应用程序构建了一个自定义用户模型,设置如下:

class CustomUser(AbstractBaseUser):
    email = models.CharField()
    username = models.CharField
    is_staff...

对于个人资料应用程序:

class UserProfile(models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL)
    city = models.CharField()
    state = models....

我之所以这样设置,是因为我不希望在创建用户时实例化配置文件。我希望它在第一次登录时创建。

我正在尝试创建一个 modelForm 来帮助创建 UserProfile。我对如何获取当前登录的用户以便将其保存到 OneToOneField 感到有些困惑。我知道这与表单的 init 方法有关,但我查看了文档,似乎无法找到明确的解决方案。请帮忙!!所以我创建了一个表格,如:

class BasicProfile(forms.ModelForm):
    class Meta:
        model = UserProfile
        exclude = ['foo']

我的问题:如何在表单中输入用户?我只是使用:

self.user = request.user 
4

2 回答 2

0

如果您启用了AuthenticationMiddleware,则请求对象带有一个用户属性。所以 - 是的,您可以使用 request.user 访问它。

请注意,request.user也可以是django.contrib.auth.models.AnonymousUser. 您必须先调用以确保您处理的是“真实”用户request.user.is_authenticated()

在 ModelForms 中使用 exclude 通常是个坏主意。一开始这似乎是一种不错的方法,但是当您的应用程序变得更大并且您使用这个隐藏字段更改用户模型时,您忘记添加 exclude.. ;)

于 2013-11-07T08:19:35.777 回答
0

想通了..@Jay - 感谢您让我走上正轨。

表格.py:

class FormaholicsAnon(forms.Form):
    name = forms.Char...  
    ...

    def __init__(self, *args, **kwargs):

        self.user = kwargs.pop('user', None)
        super(FormaholicsAnon, self).__init__(*args, **kwargs)

视图.py:

# Make sure the current user is not anonymous
if request.user.is_authenticated():
    form = FormaholicsAnon(request.POST, user=request.user)
于 2013-11-07T16:42:55.393 回答