【问题标题】:Extends User profile in Django在 Django 中扩展用户配置文件
【发布时间】:2015-07-08 11:05:17
【问题描述】:

我正在尝试制作可编辑的用户配置文件,并找到了如何向其中添加一些字段...但我还需要制作可编辑的名字和姓氏、电子邮件和一个用于更改用户密码的字段。现在我的表单中只有用户和其他字段...

我怎么能意识到这一点?

我的模特:

import PIL

from django.db import models
from django.contrib.auth.models import User
from PIL import Image
from django.db import models

# Create your models here.

class UserProfile(models.Model):  
    user = models.OneToOneField(User)
    user_phone = models.CharField(max_length=140, blank=True, null=True)
    user_picture = models.ImageField(upload_to='users', blank=True, null=True)
    user_balance = models.IntegerField(default=0)

User.profile = property(lambda u: UserProfile.objects.get_or_create(user=u) [0])

我的forms.py

from django import forms
from userprofile.models import UserProfile

class UserProfileForm(forms.ModelForm):
    class Meta:
        model = UserProfile
        fields = ('user', 'user_phone', 'user_picture', 'user_balance')

我的看法:

from django.shortcuts import render, render_to_response
from django.shortcuts import HttpResponseRedirect, Http404
from django.template import RequestContext
from django.contrib.auth.decorators import login_required
from django.core.context_processors import csrf

# Create your views here.
from userprofile.forms import UserProfileForm
from userprofile.models import UserProfile

def user_profile(request):
    if request.method == 'POST':
        form = UserProfileForm(request.POST, instance=request.user.profile)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect('/')
    else:
        user = request.user
        profile = user.profile
        form = UserProfileForm(instance=profile)

    args = {}
    args.update(csrf(request))

    args['form'] = form

    return render_to_response('profile.html', args)

还有我的模板:

{% for field in form %}
    {{ field.error }}

{% endfor %}

<form action="/users/profile/" method="POST">{% csrf_token %}
{{ form.as_ul }}

<input type="submit" value="Update" />

</form>

【问题讨论】:

    标签: django django-profiles


    【解决方案1】:

    如果您不能从 UserProfile 调用用户字段,那么您可以为 User 模型创建一个表单

    class UserForm(forms.ModelForm):
        class Meta:
            model = User
            fields = ('last_name', 'email', 'password')
    

    您还需要在视图中显示这两种形式。检查这个例子ModelForm with OneToOneField in Django 对于密码字段,您可能需要执行类似的操作,请查看示例。

    https://docs.djangoproject.com/en/1.5/topics/auth/customizing/#a-full-example

    【讨论】:

    • 这是我第一次尝试做的,当然))那行不通...Unknown field(s) (user.last_name) specified for UserProfile 等等所有其他领域...
    • 好的,那么,你要做的就是为模型用户创建第二个表单,我更新我的答案,这样你就可以看到了。
    • 我没看懂,如何实现两个表单到一个视图并在一个页面上渲染...:/
    • 你在我给你的那个链接中有一个例子,if all((profile_form.is_valid(), address_form.is_valid())): profile = profile_form.save() address = address_form.save( commit=False) address.printer_profile = profile address.save() 当然在模板中你需要在一个
      标签下显示两个表单:-)
      {% csrf_token % } {{ profile_form }} {{ address_form }}
    猜你喜欢
    • 2012-03-11
    • 2012-07-22
    • 2013-06-19
    • 2017-04-26
    • 2016-07-29
    • 1970-01-01
    • 2018-01-26
    • 2012-04-30
    • 2011-02-19
    相关资源
    最近更新 更多