【问题标题】:Connecting User to Profile将用户连接到配置文件
【发布时间】:2013-11-07 02:51:05
【问题描述】:

对于我的项目(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 

【问题讨论】:

    标签: django django-models django-forms


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      forms.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)
      

      views.py:

      # Make sure the current user is not anonymous
      if request.user.is_authenticated():
          form = FormaholicsAnon(request.POST, user=request.user)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-09
        • 1970-01-01
        • 2012-09-16
        • 1970-01-01
        • 2017-03-28
        • 1970-01-01
        • 2018-12-23
        • 2019-01-26
        相关资源
        最近更新 更多