通过model获取一个表单。modelForm是一个非常实用的类。

数据库对应model,通过model生成一个对应的Form,就是modelForm了。

accounts_forms.py:

在modelForm里面通过widgets修改表格样式

from django import forms
from django.contrib.auth.models import User
from .models import UserProfileInfo

class UserForm(forms.ModelForm):

    class Meta():
        model = User
        fields = ('password','email')
#通过widgets,修改css 
        widgets = {
            'username': forms.TextInput(
				attrs={
					'class': 'form-control',
                                        'cols': 80, 'rows': 20
					}
				),
            'email': forms.EmailInput(
				attrs={
					'class': 'form-control'
					}
				),
            'passsword':forms.PasswordInput(
                attrs={
					'class': 'form-control'
					}
				),
            
            
			}


class UserProfileInfoForm(forms.ModelForm):
    class Meta():
        model = UserProfileInfo
        fields = ('profile_phone','profile_pic','profile_site','profile_descption')

        widgets = {
            'profile_phone': forms.NumberInput(
				attrs={
					'class': 'form-control'
					}
				),
            'profile_site': forms.URLInput(
				attrs={
					'class': 'form-control'
					}
				),
            'profile_descption': forms.Textarea(
				attrs={
					'class': 'form-control'
					}
				),
            'profile_pic': forms.FileInput(
				attrs={
					'class': 'form-control custom-file'
					}
				),
			}
view.py

modelForm新增一个记录

profile_form = UserProfileInfoForm()

modelForm修改一个现有的记录:

user_pofile = UserProfileInfo.objects.get(user_id=user_id) 
profile_form = UserProfileInfoForm(data=request.POST,instance=user_pofile)

新增和修改的区别在于,是否提供了参数instance

save() 方法

user的id是profile的 user_id,profile表的外键是user_id

先保存user,user.save()

profile_form.save(commit=False)意思是先不写入数据库,需要修改一些值,这里是把profile和user对应起来后,再保存数据库。

        if user_form.is_valid() and profile_form.is_valid():

            # Save User Form to Database
            user = user_form.save()
            # Hash the password
            user.set_password(user.password)
            # Update with Hashed password
            user.save()
            # Now we deal with the extra info!
            # Can't commit yet because we still need to manipulate
            pf = profile_form.save(commit=False)
            # Set One to One relationship between
            # UserForm and UserProfileInfoForm
            pf.user = user
            pf.save()

通过POST获取了modelForm的对象后,想要修改值,不能通过对象的方式,比如User_Form.password.value=”,需要通过初始化的方式赋值。

user_form = UserForm(initial={'password':''},instance=user_basic)


如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!



1 条评论

django forms 详解怎么用 - Christopher · 2019年12月31日 上午2:27

[…] 如何使用modelForm […]

发表评论

电子邮件地址不会被公开。 必填项已用*标注