Django 의 Model 조작 표 구현
기본 동작
#
models.Tb1.objects.create(c1='xx', c2='oo') # , **kwargs
obj = models.Tb1(c1='xx', c2='oo')
obj.save()
dic = {'c1':'xx','c2':'oo'}
models.Tb1.objects.create(**dic) #Form , Form **
#
models.Tb1.objects.get(id=123) # , ( )
models.Tb1.objects.all() # .first()
models.Tb1.objects.filter(name='seven') # **
#
models.Tb1.objects.filter(name='seven').delete() #
#
models.Tb1.objects.filter(name='seven').update(gender='0') # , **kwargs
obj = models.Tb1.objects.get(id=1)
obj.c1 = '111'
obj.save() #
데이터베이스 에서 꺼 낸 데이터 형식 자세히 보기:
w = models.Simp.objects.all()
print w, type(w)
[<Simp: chenc>, <Simp: zan>, <Simp: zhangsan>] <class 'django.db.models.query.QuerySet'>
데이터베이스 에서 데 이 터 를 꺼 내 면 대상 을 포함 하 는 목록 처럼 보 입 니 다.실제 전체 데 이 터 는 django 의 특수 형식 인 Query Set 입 니 다..all()은 모든 열의 데 이 터 를 얻 는 것 입 니 다.'values()'를 추가 하여 특정한 열 을 추출 할 수 있 습 니 다.각 항목 의 값 은 사전 입 니 다.
w = models.Simp.objects.all().values('username')
print w, type(w)
[{'username': u'chenc'}, {'username': u'zan'}, {'username': u'zhangsan'}] <class 'django.db.models.query.QuerySet'>
.values_list(),가 져 온 값 은 원 그룹 입 니 다.
w = models.Simp.objects.all().values_list('username')
print w, type(w)
[(u'chenc',), (u'zan',), (u'zhangsan',)] <class 'django.db.models.query.QuerySet'>
.values_list()도 여러 개의 인 자 를 추가 할 수 있 습 니 다.(Form 에 맞 춰 전단 에 동적 select 를 생 성 할 수 있 습 니 다)
w = models.Simp.objects.all().values_list('id', 'username')
print w, type(w)
[(1, u'chenc'), (2, u'zan'), (3, u'zhangsan')] <class 'django.db.models.query.QuerySet'>
query 실행 중인 sql 문 구 를 볼 수 있 습 니 다:
b = models.Simp.objects.all()
print b.query
SELECT "app01_simp"."id", "app01_simp"."username", "app01_simp"."password" FROM "app01_simp"
2.진급 조작두 밑줄 을 이용 하여 필드 와 대응 하 는 동작 을 연결 합 니 다.
#
#
# models.Tb1.objects.filter(name='seven').count()
# ,
#
# models.Tb1.objects.filter(id__gt=1) # id 1
# models.Tb1.objects.filter(id__lt=10) # id 10
# models.Tb1.objects.filter(id__lt=10, id__gt=1) # id 1 10
# in
#
# models.Tb1.objects.filter(id__in=[11, 22, 33]) # id 11、22、33
# models.Tb1.objects.exclude(id__in=[11, 22, 33]) # not in
# contains
#
# models.Tb1.objects.filter(name__contains="ven")
# models.Tb1.objects.filter(name__icontains="ven") # icontains
# models.Tb1.objects.exclude(name__icontains="ven")
# range
#
# models.Tb1.objects.filter(id__range=[1, 2]) # bettwen and
#
#
# startswith,istartswith, endswith, iendswith,
# order by
#
# models.Tb1.objects.filter(name='seven').order_by('id') # asc
# models.Tb1.objects.filter(name='seven').order_by('-id') # desc
# limit 、offset
#
# models.Tb1.objects.all()[10:20]
# group by
from django.db.models import Count, Min, Max, Sum
# models.Tb1.objects.filter(c1=1).values('id').annotate(c=Count('num'))
# SELECT "app01_tb1"."id", COUNT("app01_tb1"."num") AS "c" FROM "app01_tb1" WHERE "app01_tb1"."c1" = 1 GROUP BY "app01_tb1"."id"
3.조작 표 중 하나 인 다 중 인 스 턴 스우 리 는 완전한 과정 특별 성명 을 만 듭 니 다.(과정 이 번 거 롭 고 지루 합 니 다.순 전 히 작가 가 생각 을 정리 하고 해석 을 직접 건 너 뛸 수 있 습 니 다)
우선 시 계 를 두 장 만 들 고 외 키 를 설정 합 니 다.
class GroupNew(models.Model):
groupname = models.CharField(max_length=15)
class UserNew(models.Model):
user = models.CharField(max_length=15)
10 group = models.ForeignKey(GroupNew)
그 다음 에 표 에 몇 개의 데 이 터 를 만 들 고 url 생 성 데 이 터 를 설정 합 니 다.
# coding:utf-8
from django.shortcuts import HttpResponse,render
from app01 import models
def Foreign(request):
models.GroupNew.objects.create(groupname='CEO')
models.GroupNew.objects.create(groupname='CTO')
models.GroupNew.objects.create(groupname='COO')
return HttpResponse('OK')
폼 생 성 에 사용 할 form 만 들 기:(동적 select)
# coding:utf-8
from django import forms
from app01 import models
class CreateForm(forms.Form):
user = forms.CharField(max_length=20)
group = forms.IntegerField(widget=forms.Select())
def __init__(self, *args, **kwargs):
super(CreateForm, self).__init__(*args, **kwargs)
self.fields['group'].widget.choices = models.GroupNew.objects.all().values_list('id', 'groupname')
views.py 에 사용 자 를 만 드 는 방법 을 쓰 고 form 을 사용 합 니 다:
from app01.forms import foreign as UserForm
def createuser(request):
obj = UserForm.CreateForm()
return render(request, 'foreign/createuser.html', {'obj': obj})
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>
url 접근 설정 성공:이제 사용자 데 이 터 를 만 들 려 고 합 니 다.(두 가지 방법)
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、
# group_obj = models.GroupNew.objects.get(id=group_id)
# #
# 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})
또 하나의 방법 은 Form 의 수정 에 따라 만 드 는 것 입 니 다.(주의:전단 페이지 에 도 를 추가 해 야 합 니 다.id 와 일치{{obj.groupid }} )forms.py
# coding:utf-8
from django import forms
from app01 import models
class CreateForm(forms.Form):
user = forms.CharField(max_length=20)
group_id = forms.IntegerField(widget=forms.Select()) # form
def __init__(self, *args, **kwargs):
super(CreateForm, self).__init__(*args, **kwargs)
self.fields['group_id'].widget.choices = models.GroupNew.objects.all().values_list('id', 'groupname')
그리고 vires.py 에서 전단 에서 들 려 오 는 사전 을 직접 가 져 와 데 이 터 를 만 들 수 있 습 니 다.**방식 으로 참조 하 시기 바 랍 니 다.
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、
# group_obj = models.GroupNew.objects.get(id=group_id)
# #
# models.UserNew.objects.create(user=username, group=group_obj)
# 2、 group_id
models.UserNew.objects.create(**all_data) # **
else:
pass
return render(request, 'foreign/createuser.html', {'obj': obj})
다음은 데 이 터 를 보 여 드릴 수 있 습 니 다.views.pu 에서 데 이 터 를 모두 가 져 와 전단 으로 되 돌려 줍 니 다:
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() #
return render(request, 'foreign/createuser.html', {'obj': obj, 'user_list': user_list})
4.프론트 와 백 스테이지 에서 데 이 터 를 가 져 옵 니 다(일어나 지 않 는 더 블 밑줄"")전단 페이지 데이터 전시 가 져 오기:
프론트 페이지 에 서 는 사용자 그룹의 id 를 표시 할 수 없고 사용자 그룹의 이름 을 직접 표시 합 니 다.
외부 키 에 대응 하 는 필드 는 하나의 대상 이기 때문에 이 대상 은 사전 표 의 한 줄 데 이 터 를 대신 가리 키 기 때문에 우 리 는 전단 에서 사전 표 의 데 이 터 를"..."로 가 져 옵 니 다.
<table>
{% for item in user_list %}
<tr>
<td>{{ item.user }}</td>
<td>{{ item.group.groupname }}</td> "."
</tr>
{% endfor %}
</table>
배경 에서 데이터 가 져 오기:(일어나 지 않 는 더 블 밑줄)우 리 는 전단 에서 get 의 방법 으로 데 이 터 를 얻 습 니 다.
브 라 우 저의 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) #
return render(request, 'foreign/createuser.html', {'obj': obj, 'user_list': user_list})
5.해석 과 총화모든 연결 표 작업 은 조금 만 이해 하면 됩 니 다.
model 의 일반 필드 는 문자열 이 고 외부 키 는 대상 을 대표 합 니 다.이 대상 은 사전 표 의 한 줄 데이터 입 니 다.
데이터 생 성:
1.대상 등급 에 따라 표를 조작 합 니 다.
표 에 외 키 가 있 는 필드 는 다른 표 의 한 줄 데 이 터 를 가리킨다.Models 에서 의 표현 형식 은 하나의 대상 입 니 다.그러면 우리 가 이 표를 만 들 때 외부 키 의 필드 에 값 을 전달 할 때 도 대상 을 전달 해 야 합 니 다.프론트 데스크 에서 얻 은 것 은 숫자'1'입 니 다.1 은 하나의 대상 이 아 닙 니 다.이'1'에 따라 사전 표 의 이미 지 를 먼저 만 들 기 때문에 프론트 데스크 의'1'에 따라 사전 표 에 대응 하 는 데이터 대상 을 먼저 가 져 옵 니 다.이 대상 을 표를 만 들 때 필요 한 대상 인자 에 전달 하면 됩 니 다.
(사실 대상 을 sql 문 구 를 띠 로 바 꾸 는 것 도id 스타일
2.데이터베이스 등급 에 따라 표를 조작 합 니 다.
우선 데이터베이스 시트 의 외 키 값 스타일 user 를 살 펴 볼 수 있 습 니 다.group_id。“_id"models 에서 정의 되 지 않 은 것 은 django 가 자동 으로 정의 하 는 스타일 입 니 다.그래서 우리 가 데이터베이스 에 데 이 터 를 삽입 할 때 외부 키 의 필드 에 를 추가 해 야 합 니 다.id,이렇게 하면 프론트 에서 얻 은 숫자 를 직접 전달 할 수 있 습 니 다.
(form 에서 외 키 의 값 을 수정 할 수 있 습 니 다."id",이렇게 백 엔 드 에 전 달 된 데 이 터 는 사전 하 나 를 직접 가 져 올 수 있 습 니 다.**방식 으로 값 을 전송 하여 데 이 터 를 만 듭 니 다)
데이터 가 져 오기:
크로스 테이블 데이터 추출 용"."
models 에 있 는 외부 키 대 는 다른 표 의 한 줄 데 이 터 를 말 하 며 이 데이터 형식 은 대상 이기 때 문 입 니 다.
그러면 이 대상 에 따라 그 줄 의 데이터 에 대응 하 는 필드 를 직접 찾 을 수 있 습 니 다."."로 가 져 오기
전단 페이지 에서{{item.group.groupname}방식 으로 가 져 올 수 있 습 니 다.
크로스 테이블 에서 데 이 터 를 걸 러 낼 때""을 사용 합 니 다.
필터 데이터 용 더 블 밑줄""(group__groupname=val),여러 장의 시계 가 외부 키 를 만 들 면 더 블 밑줄""을 계속 사용 합 니 다.크로스 테이블 조회 데이터
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Django 라우팅 계층 URLconf 작용 및 원리 해석URL 구성(URLconf)은 Django가 지원하는 웹 사이트의 디렉토리와 같습니다.그것의 본질은 URL과 이 URL을 호출할 보기 함수 사이의 맵표입니다. 위의 예제에서는 URL의 값을 캡처하고 위치 매개 변수로...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.