+ 장고 튜토리얼 4 - 실제 손-항목 Pycharm 첫 번째 테스트 API

면책 조항 :이 문서는 블로거 원본입니다은 허용 블로거없이 복제 할 수 없다. https://blog.csdn.net/baidu_39459954/article/details/90241261

오브젝트 질문 생성

이제, 대화 형 파이썬 명령 줄에 들어가 장고 당신을 위해 만든 API의 다양한 해보자. 열기 파이썬은 다음 명령 줄을 사용하여 명령 :
파이썬 manage.py
또는 우리가 도구 -> 파이썬 콘솔의 Pycharm을 열 수 있습니다
여기에 그림 삽입 설명파이썬 3.7.3 (v3.7.3 : ef4ec6ed12 3 월 (25) 2019 22시 22분 5초를) 석사 v.1916 '는 Win32 ON] 64합니다 (AMD64)를 비트
장고 2.2.1

선택과 질문은 우리가 마지막 기사를 작성한 모델 클래스를 소개 :

>>> from polls.models import Choice, Question

쿼리의 질문은, 지금은 비어 있습니다 :

>>> Question.objects.all()
<QuerySet []>

대신 datetime.datetime.now 장고 ()에 새로운 질문, 권장 timezone.now (), 그래서 도입 시간대를 만듭니다

>>> from django.utils import timezone
>>> q = Question(question_text="What's new?", pub_date=timezone.now())

방금 만든 데이터베이스에 질문을 저장 () 저장 사용

>>> q.save()

데이터가 저장되어 볼 수있는 데이터베이스를 조회 :
여기에 그림 삽입 설명

질문 쿼리 객체 생성

ID가 자동으로 q.id 현재 ID 번호를 조회 할 수 있습니다 생성됩니다 :

>>> q.id
1

通过python属性访问模型字段值:
Access model field values via Python attributes.

>>> q.question_text
"What's new?"
>>> q.pub_date
datetime.datetime(2019, 5, 19, 16, 23, 13, 320097)

여기에 그림 삽입 설명
通过修改属性修改对应的值,然后再调用save():

>>> q.question_text = "What's up?"
>>> q.save()

objects.all()显示数据库中所有的对象:

>>> Question.objects.all()
<QuerySet [<Question: Question object (1)>]>

__ str __() 方法

但是输出结果 <Question: Question object (1)> 对于我们了解这个对象的细节没什么帮助。我们可以通过编辑 Question 模型的代码(位于 polls/models.py 中)来修复这个问题。给 Question 和 Choice 增加 __str __() 方法。

from django.db import models


class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')

    def __str__(self):
        return self.question_text


class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

    def __str__(self):
        return self.choice_text

重新打开Python Console,再次查询,确认我们加的__str __() 生效了:

>>> from polls.models import Choice, Question
>>> Question.objects.all()
<QuerySet [<Question: What's up?>]>

数据库查找API

Django提供了丰富的数据库查找API,它完全由关键字参数驱动。

>>> Question.objects.filter(id=1)
<QuerySet [<Question: What's up?>]>
>>> Question.objects.filter(question_text__startswith='What')
<QuerySet [<Question: What's up?>]>

获取今年发布的问题:

>>> from django.utils import timezone
>>> current_year = timezone.now().year
>>> Question.objects.get(pub_date__year=current_year)
<Question: What's up?>

如果请求不存在的ID,将引发异常:

>>> Question.objects.get(id=2)
Traceback (most recent call last):
    ...
polls.models.Question.DoesNotExist: Question matching query does not exist.

通过主键查找是最常见的情况,因此Django提供了主键精确查找的快捷方式,以下内容与Question.objects.get(id = 1)相同。

>>> Question.objects.get(pk=1)
<Question: What's up?>

自定义方法

给模型增加 __ str__() 方法是很重要的,这不仅仅能给你在命令行里使用带来方便,Django 自动生成的 admin 里也使用这个方法来表示对象。
注意:这些都是常规的 Python方法。让我们添加一个自定义的方法was_published_recently,这只是为了演示:

import datetime
from django.db import models
from django.utils import timezone


class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')

    def __str__(self):
        return self.question_text

    def was_published_recently(self):
        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)


class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

    def __str__(self):
        return self.choice_text

重新连接,查看我们新加的自定义方法是否生效:

>>> from polls.models import Choice, Question 
>>> q = Question.objects.get(pk=1)
>>> q.was_published_recently()
True

创建Choice对象

给提出的问题添加几个选择.
(가), 통화가 새로운 선택 객체를 생성 작성 INSERT 문을 수행, 가능한 선택 세트에 검색을 추가하고 새로운 선택 객체를 반환합니다. 장고 외래 키 관계의 "다른 쪽을"보유하는 집합을 생성

(예 : 선택 문제는) API를 통해 액세스 할 수 있습니다.

>>> q = Question.objects.get(pk=1)

비어 선택에 대응하는 Q 표시 객체 (1 차 키).

>>> q.choice_set.all()
<QuerySet []>

세 가지 선택을 만듭니다

>>> q.choice_set.create(choice_text='Not much', votes=0)
<Choice: Not much>
>>> q.choice_set.create(choice_text='The sky', votes=0)
<Choice: The sky>
>>> c = q.choice_set.create(choice_text='Just hacking again', votes=0)

선택 객체는 관련 질문 객체 API에 액세스 할 수 있습니다.

>>> c.question
<Question: What's up?>

그리고 그 반대의 경우도 마찬가지 : 질문 선택 객체는 객체에 액세스 할 수 있습니다.

>>> q.choice_set.all()
<QuerySet [<Choice: Not much>, <Choice: The sky>, <Choice: Just hacking again>]>
>>> q.choice_set.count()
3

제한이 없습니다 API가 자동으로 멀티 레벨을 원하는만큼 깊이 될 수 있습니다 별도의 관계에 이중 밑줄을 사용하여, 사용자의 필요에 따라 관계를 추적합니다.
이 모든 년에 어떤 문제 (재사용 변수 'CURRENT_YEAR'우리 위에 생성)을 선택 PUB_DATE 찾을 수 있습니다.

>>> from django.utils import timezone
>>> current_year = timezone.now().year
>>> Choice.objects.filter(question__pub_date__year=current_year)
<QuerySet [<Choice: Not much>, <Choice: The sky>, <Choice: Just hacking again>]>

선택 삭제) (삭제 사용합니다.

>>> c = q.choice_set.filter(choice_text__startswith='Just hacking')
>>> c.delete()

데이터베이스를 조회하고 해당 선택이 삭제 된 것을 발견
여기에 그림 삽입 설명

이전 : + 장고 손-항목 데이터베이스 구성 Pycharm 전투 레슨 3

다음 : + 장고 손-항목 Pycharm 전투 튜토리얼 5 관리자 페이지

추천

출처blog.csdn.net/baidu_39459954/article/details/90241261