Django1.6向用户mod添加自定义字段

2024-04-20 03:44:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下几点

简介/模型.py

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    university = models.CharField(max_length=200, choices=UNIVERSITY, null=True)

简介/视图.py

^{pr2}$

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

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

我猜这和表格的联系方式有关。在UserProfile表中,我有id、user_id和university列,其中包含适当的数据。在


Tags: namepy模型idmodelmodelslengthmax
3条回答

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

Django为相关模型提供字段的表单的方法是内联表单集:
https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#inline-formsets

例如

# 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,
    })

{最后我解决了。这使我可以在一个名为profiles\u users的表中设置所有用户字段,并有额外的字段。在

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

ModelForm只能为单个模型生成表单字段,在本例中是UserProfile。元类中的fields属性指定要显示的表单字段。在本例中,没有定义字段first_nameusernameemail和{}。您必须在表单上手动定义它们,并更改save方法以保存User对象:

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

相关问题 更多 >