創(chuàng)建一個html文件用來用戶注冊:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<form action="/createuser/" method="post">
<p>{{ obj.user }}</p>
<p>{{ obj.group }}</p>
<input type="submit" value="提交" />
</form>
</body>
</html>
配置好訪問:
image.png
創(chuàng)建用戶數(shù)據(jù):
def createuser(request):
obj = UserForm.CreateForm(request.POST)
if request.method == 'POST':
if obj.is_valid():
all_data = obj.clean()
group_id = all_data['group']
username = all_data['user']
# 1国夜、先獲取字典表里的數(shù)據(jù)對象
# group_obj = models.GroupNew.objects.get(id=group_id)
# # 創(chuàng)建用戶數(shù)據(jù)
# models.UserNew.objects.create(user=username, group=group_obj)
# 2试读、 直接傳group_id不需獲取對象
models.UserNew.objects.create(user=username, group_id=group_id)
else:
pass
return render(request, 'foreign/createuser.html', {'obj': obj})
然后再vires.py里面就可以直接拿到前端傳來的字典钟病,直接創(chuàng)建數(shù)據(jù)了屯掖。注意用**的方式傳參
from app01.forms import foreign as UserForm
def createuser(request):
obj = UserForm.CreateForm(request.POST)
if request.method == 'POST':
if obj.is_valid():
all_data = obj.clean()
print all_data
# group_id = all_data['group']
username = all_data['user']
# 1裸删、先獲取字典表里的數(shù)據(jù)對象
# group_obj = models.GroupNew.objects.get(id=group_id)
# # 創(chuàng)建用戶數(shù)據(jù)
# models.UserNew.objects.create(user=username, group=group_obj)
# 2噪径、 直接傳group_id不需獲取對象
models.UserNew.objects.create(**all_data) #用**的方式傳遞字典參數(shù)
else:
pass
return render(request, 'foreign/createuser.html', {'obj': obj})
下面我們可以來展示一下數(shù)據(jù):
在views.pu里把數(shù)據(jù)全部拿到棍掐,返回到前端:
from app01.forms import foreign as UserForm
def createuser(request):
obj = UserForm.CreateForm(request.POST)
if request.method == 'POST':
if obj.is_valid():
all_data = obj.clean()
models.UserNew.objects.create(**all_data)
else:
pass
user_list = models.UserNew.objects.all() #獲取到表中的全部數(shù)據(jù)
return render(request, 'foreign/createuser.html', {'obj': obj, 'user_list': user_list})
前端頁面獲取數(shù)據(jù)展示:
在前端頁面不能顯示用戶組的id,而是直接顯示用戶組的名稱
因為外鍵對應的字段是一個對象藏雏,這個對象代指的是字典表中的一行數(shù)據(jù),所以我們在前端取到字典表中的數(shù)據(jù)用“.”獲取
<table>
{% for item in user_list %}
<tr>
<td>{{ item.user }}</td>
<td>{{ item.group.groupname }}</td> 從對象中獲取數(shù)據(jù)用"."
</tr>
{% endfor %}
</table>
我們在前端用get的方法獲取數(shù)據(jù)作煌,
在瀏覽器的url后追加字符 http://127.0.0.1:8000/createuser/?group=CFO
例如:我們要展示CFO組里面所以得用戶掘殴,在views里要如何寫呢?
我們在前端用get的方法獲取數(shù)據(jù)粟誓,
在瀏覽器的url后追加字符 http://127.0.0.1:8000/createuser/?group=CEO
例如:我們要展示CEO組里面所以得用戶奏寨,在views里要如何寫呢?
from app01.forms import foreign as UserForm
def createuser(request):
obj = UserForm.CreateForm(request.POST)
if request.method == 'POST':
if obj.is_valid():
all_data = obj.clean()
models.UserNew.objects.create(**all_data)
else:
pass
val = request.GET.get('group')
user_list = models.UserNew.objects.filter(group__groupname=val) # 去字典表里的數(shù)據(jù)時用雙下劃線
return render(request, 'foreign/createuser.html', {'obj': obj, 'user_list': user_list})
總結(jié)
創(chuàng)建數(shù)據(jù):
1鹰服、根據(jù)對象級別來操作表病瞳。
表中有外鍵的字段代指的就是另外一張表的一行數(shù)據(jù)。在Models里的表現(xiàn)形式就是一個對象悲酷,那么我們創(chuàng)建這張表時套菜,給外鍵的字段傳值時也應該傳一個對象,而從前臺獲取到的是一個數(shù)字“1”设易,1不是一個對象逗柴,根據(jù)這個“1”先創(chuàng)建一個字典表的對象,所以根據(jù)前臺的“1”先獲取字典表里對應的數(shù)據(jù)對象顿肺,把這個對象傳遞到創(chuàng)建表時所需的對象參數(shù)即可戏溺。
(其實也是把對象轉(zhuǎn)換成sql語句拼接成帶_id的樣式,有一種多此一舉的感覺)
2屠尊、根據(jù)數(shù)據(jù)庫級別來操作表旷祸。
首先我們可以先查看一下數(shù)據(jù)庫表中的外鍵值的樣式 user_group_id∷侠ィ“_id”在models沒有定義的肋僧,是django自動為我們定義的樣式。所以我們在向數(shù)據(jù)庫中插入數(shù)據(jù)的時候控淡,外鍵的字段應該加上_id嫌吠,這樣就可以直接傳從前臺獲取的數(shù)字了。
(可以再form中修改外鍵的值掺炭,加"_id",這樣傳到后臺的數(shù)據(jù)就能直接拿到一個字典辫诅,在用**的方式傳值創(chuàng)建數(shù)據(jù))
獲取數(shù)據(jù):
跨表取數(shù)據(jù)用 "."
因為在models里的外鍵代指的是另外一張表的一行數(shù)據(jù),且這個數(shù)據(jù)類型為一個對象涧狮。
那么就可以根據(jù)這個對象直接找到那行數(shù)據(jù)里對應的字段炕矮。用 “.”獲取
在前端頁面就可以{{item.group.groupname}}方式獲取到么夫。
跨表過濾數(shù)據(jù)時用 “__”
過濾數(shù)據(jù)用雙下劃線 “__”(group__groupname=val),如果有多張表建立外鍵繼續(xù)用雙下劃線“__”跨表查詢數(shù)據(jù)