Django 의 Model 조작 표 구현

12733 단어 Djangomodel조작 표
모델 조작 표
기본 동작

#  

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),여러 장의 시계 가 외부 키 를 만 들 면 더 블 밑줄""을 계속 사용 합 니 다.크로스 테이블 조회 데이터
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기