关于Django和用户身份验证的问题

Fre*_*ins 1 python django django-authentication

Django的noob问题:

我使用dango.contrib.auth来管理我的网站用户.但是现在,我正在开发"设置页面",用户可以在其中编辑他的名字,姓氏和电子邮件地址.但在设置页面中我还想要一个"简报"复选框.

问题是:1)我应该在哪里将新闻通讯字段放在数据库中?2)如何创建用于编辑这些信息的表单?

谢谢.

- 更新 -

现在我在models.py中这个:

class UserProfile(models.Model):
    user = models.ForeignKey(User, unique = True)
    favourite_color = models.CharField(max_length = 40)
Run Code Online (Sandbox Code Playgroud)

这在forms.py中:

class UserSettingsForm(forms.ModelForm):

    class Meta:
        model = User
        exclude = ('password',)

    def save(self, commit=False):
        user = super(UserSettingsForm,self).save(commit)
        favourite_color = self.cleaned_data.get('favourite_color', '')
        if favourite_color and user.favourite_color is None:
            UserProfile(user=user).save()
        if not slug:
            UserProfile.objects.filter(user=user).delete()

        if not commit:
            user.save()
        return user
Run Code Online (Sandbox Code Playgroud)

我有点困惑.我会在设置表单中编辑名字,姓氏,电子邮件和喜欢的颜色等信息,但实际上我做错了.

Mik*_*one 6

您想查看用户配置文件.

编辑:关于表格,有什么阻止你使用两种形式?我认为Django会忽略HTTP请求中与表单不匹配的字段,因此您可以将请求提供给两个表单.渲染模板时,Django不生成<form>标记或提交按钮,因此您只需将两个表单放在一起<form>.在你的视图中这样的东西(修改Django示例):

def edit_user_view(request):
    if request.method == 'POST': # If the form has been submitted...
        # Two forms bound to the POST data
        userForm = UserForm(request.POST)
        profileForm = ProfileForm(request.POST)
        if userForm.is_valid() and userForm.is_valid():
            # All validation rules pass
            # Process the data in userForm. and profileForm.cleaned_data
            # ...
            return HttpResponseRedirect('/thanks/') # Redirect after POST
    else:
        # Unbound forms
        userForm = UserForm()
        profileForm = ProfileForm()

    return render_to_response('edit_user.html', {
        'userForm': userForm,
        'profileForm': profileForm,
    })
Run Code Online (Sandbox Code Playgroud)

在模板中:

<form action="/contact/" method="post">{% csrf_token %}
{{ userForm.as_p }}
{{ profileForm.as_p }}
<input type="submit" value="Submit" />
</form>
Run Code Online (Sandbox Code Playgroud)

这实际上只是一个起点,但我认为没有任何理由不起作用.