Django 将用户连接到配置文件
对于我的项目(Django 1.5),我设置了两个应用程序,一个称为accounts以处理身份验证,另一个称为profiles以处理所有配置文件操作。我已通过以下设置为accounts应用程序构建了自定义用户模型:Django 将用户连接到配置文件,django,django-models,django-forms,Django,Django Models,Django Forms,对于我的项目(Django 1.5),我设置了两个应用程序,一个称为accounts以处理身份验证,另一个称为profiles以处理所有配置文件操作。我已通过以下设置为accounts应用程序构建了自定义用户模型: class CustomUser(AbstractBaseUser): email = models.CharField() username = models.CharField is_staff... 对于个人资料应用程序: class UserProf
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
如果已启用,则请求对象附带一个用户属性。所以-是的,您可以使用request.user访问它
请注意,request.user
也可以是django.contrib.auth.models.AnonymousUser
。您必须首先通过调用request.user.is\u authenticated()
来确保您正在处理一个“真实”用户
在ModelForms中使用exclude通常是个坏主意。起初这似乎是一个不错的方法,但当您的应用程序变得更大,并且您使用这个隐藏字段更改了您的用户模型时,您忘记添加“排除”。) 想明白了。@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)