1. 程式人生 > >Django第四課——ModelForm用法

Django第四課——ModelForm用法

class () quest .html .get ins reat 所有 create

內容概要:

1.新增數據庫表中數據

2.更新數據庫表中數據


1.新增數據庫表中數據

views文件夾==》mf.py中

‘‘‘
ModelForm的功能介紹:
1.獲取所有或指定字段
2.新增數據庫表中數據
3.更新數據庫表中數據
‘‘‘
from django.shortcuts import render
from django import forms
from app01 import models

class UModelForm(forms.ModelForm):
    class Meta:#定義元類,同時能將關聯的數據全部拿到(ForeignKey)
        model = models.User #和models.py中的User表關聯,註意寫法:model,沒有s!!!
        fields = ‘__all__‘ #取全部字段
#新增數據方法,並且同步到數據庫
def index(request):
    if request.method ==‘GET‘:
        obj =UModelForm()
        return render(request,‘mf.html‘,{‘obj‘:obj})
    elif request.method ==‘POST‘:
        obj = UModelForm(request.POST)
        if obj.is_valid():
            print(obj.cleaned_data)
            # models.User.objects.create(**obj.cleaned_data)#新增數據方法,或者用obj.save()
            obj.save()
        return render(request, ‘mf.html‘, {‘obj‘:obj})

  

  mf.html中

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form method="post" action="/mf/">
    {% csrf_token %}
    {{ obj.as_p }}
    <input type="submit" value="提交">
</form>

</body>
</html>

  models.py中

from django.db import models

class UserType(models.Model):
    name = models.CharField(max_length=32)
    def __str__(self):
        return self.name

class User(models.Model):
    name = models.CharField(max_length=32)
    email = models.EmailField(max_length=32)
    u_type = models.ForeignKey(‘UserType‘) #一對多
    m = models.ManyToManyField(‘M2M‘) #多對多

class M2M(models.Model):
    name = models.CharField(max_length=32)
    def __str__(self):
        return self.name

  urls.py中

from django.conf.urls import url
from django.contrib import admin
from app01.views import fm
from app01.views import mf

urlpatterns = [
    url(r‘^admin/‘, admin.site.urls),
    url(r‘^fm/‘, fm.index),
    url(r‘^aa/‘, fm.aa),
    url(r‘^mf/‘, mf.index),
]

  2.更新數據庫表中數據

views文件夾==》mf.py中

‘‘‘
ModelForm的功能介紹:
1.獲取所有或指定字段
2.新增數據庫表中數據
3.更新數據庫表中數據
‘‘‘
from django.shortcuts import render
from django import forms
from app01 import models

class UModelForm(forms.ModelForm):
    class Meta:#定義元類,同時能將關聯的數據全部拿到(ForeignKey)
        model = models.User #和models.py中的User表關聯,註意寫法:model,沒有s!!!
        fields = ‘__all__‘ #取全部字段

#更新數據庫中數據
def edit_index(request,nid):
    if request.method ==‘GET‘:
        model_obj = models.User.objects.get(id=nid)
        obj =UModelForm(instance=model_obj) #帶上現在的值
        return render(request,‘mf1.html‘,{‘obj‘:obj,‘nid‘:nid})
    elif request.method == ‘POST‘:
        model_obj = models.User.objects.get(id=nid)

        obj = UModelForm(request.POST,instance=model_obj) #這個地方也要加上instance
        if obj.is_valid():
            obj.save()
        return render(request, ‘mf1.html‘, {‘obj‘: obj})

 mf1.html中

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form method="post" action="/edit-mf-{{ nid }}/">
    {% csrf_token %}
    {{ obj.as_p }}
    <input type="submit" value="提交">
</form>

</body>
</html>

  models.py中

from django.db import models

class UserType(models.Model):
    name = models.CharField(max_length=32)
    def __str__(self):
        return self.name

class User(models.Model):
    name = models.CharField(max_length=32)
    email = models.EmailField(max_length=32)
    u_type = models.ForeignKey(‘UserType‘) #一對多
    m = models.ManyToManyField(‘M2M‘) #多對多

class M2M(models.Model):
    name = models.CharField(max_length=32)
    def __str__(self):
        return self.name

  urls.py中

from django.conf.urls import url
from django.contrib import admin
from app01.views import fm
from app01.views import mf

urlpatterns = [
    url(r‘^admin/‘, admin.site.urls),
    url(r‘^fm/‘, fm.index),
    url(r‘^aa/‘, fm.aa),
    url(r‘^mf/‘, mf.index),
    url(r‘^edit-mf-(\d+)‘, mf.edit_index),
]

  

 

Django第四課——ModelForm用法