Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django 1.6向用户模型添加自定义字段_Python_Django - Fatal编程技术网

Python Django 1.6向用户模型添加自定义字段

Python Django 1.6向用户模型添加自定义字段,python,django,Python,Django,我有以下几点 profile/models.py profile/views.py 我已经运行到南方,数据库是最新的,但我仍然得到这个错误 django.core.exceptions.FieldError: Unknown field(s) (first_name, username, email, last_name) specified for UserProfile 我猜这与表的链接方式有关。在我的UserProfile表中,我有id、user\u id和university列,其中包

我有以下几点

profile/models.py

profile/views.py

我已经运行到南方,数据库是最新的,但我仍然得到这个错误

django.core.exceptions.FieldError: Unknown field(s) (first_name, username, email, last_name) specified for UserProfile

我猜这与表的链接方式有关。在我的UserProfile表中,我有id、user\u id和university列,其中包含适当的数据。

A
ModelForm
只能为单个模型生成表单字段,在本例中为
UserProfile
。元类中的
字段
属性指定要显示的表单字段。在这种情况下,未定义字段
名字
用户名
电子邮件
姓氏
。您必须在表单上手动定义它们,并更改保存方法以保存
用户
对象:

class UserForm(forms.ModelForm):
    username = forms.CharField(max_length=100)
    email = forms.EmailField()
    ...

    class Meta:
        model = UserProfile
        fields = ('username', 'first_name', 'last_name', 'email', 'university')

    def save(self, commit=True):
        # save user and profile

ModelForm
只能为单个模型(在
Meta
类中指定的模型)生成字段

Django使用带有相关模型字段的表单的方法是内联表单集:

乙二醇


我终于在年底前解决了这个问题。这允许我在一个名为profiles\u users的表中设置所有用户字段,并具有额外的字段


有一些自定义设置需要设置,但我发现这种方法比扩展用户基类更灵活。

可能字段=(User.username,User.first\u name,User.last\u name,User.email,'university')尝试了同样的错误。您没有在此处向用户模型添加自定义字段。您有一个单独的UserProfile模型。自1.5版以来,这不是推荐的做法。您应该扩展AbstractUser类。。这是1.6版的,上面写着这样做。UserProfile只是我使用的一种命名约定,因为它是我想要访问的用户配置文件。我现在已经对它进行了更改,以扩展AbstractBaseUser,但仍然得到相同的错误。这部分是有效的。我在“我的个人资料”页面上显示了大学,但缺少其余的标准用户字段。您确定您的
user
模型中有这些字段吗?您是否在模板中呈现
formset.as_p
?是的,指定的字段在
User
模型中,我正在使用
formset | bootstrap
在具有引导功能的模板中呈现它。我通过自己的答案中解释的自定义用户模型解决了这个问题。
django.core.exceptions.FieldError: Unknown field(s) (first_name, username, email, last_name) specified for UserProfile
class UserForm(forms.ModelForm):
    username = forms.CharField(max_length=100)
    email = forms.EmailField()
    ...

    class Meta:
        model = UserProfile
        fields = ('username', 'first_name', 'last_name', 'email', 'university')

    def save(self, commit=True):
        # save user and profile
# forms.py
UserProfileFormSet = inlineformset_factory(User, UserProfile, max_num=1)

# views.py
from django.contrib.auth.models import User
from django.shortcuts import get_object_or_404, render_to_response
from .forms import UserProfileFormSet

def myview(request, user_id):
    user = get_object_or_404(User, pk=user_id)
    formset = UserProfileFormSet(request.POST or None, instance=user)
    if formset.is_valid():
        formset.save()
        # ...redirect here
    return render_to_response("my_template.html", {
        "formset": formset,
    })