Работа с моделями
Практикум по работе моделями.
Включает уроки 14 и 33 плана 1.
Описание выполнения уроков смотри на закладке Код.
Вывод всех записей:
Номер | Тема | Тип обращения | Описание | Дата добавления |
---|---|---|---|---|
3 | Проблема 3 | Пожелание | Описание проблемы 3 | 12 сентября 2015 г. 15:19 |
2 | Проблема 2 | Ошибка | Описание проблемы 2 | 12 сентября 2015 г. 15:18 |
1 | Проблема 1 | Консультация | Описание проблемы 1 | 12 сентября 2015 г. 15:18 |
Последние 2 записи:
3 | Проблема 3 | Пожелание | Описание проблемы 3 | 12 сентября 2015 г. 15:19 |
2 | Проблема 2 | Ошибка | Описание проблемы 2 | 12 сентября 2015 г. 15:18 |
Только одна запись по Id=2:
2 | Проблема 2 | Ошибка | Описание проблемы 2 | 12 сентября 2015 г. 15:18 |
Модуль models.py
# coding: utf-8
from django.db import models
class Incident(models.Model): # Обращения
class Meta:
db_table = 'app_info_incidents'
ordering = ['-date']
# Перечисление типов обращений
INCIDENT_TYPES = (
('CN', 'Консультация'),
('ER', 'Ошибка'),
('SG', 'Пожелание'),
)
# Описание модели
number = models.IntegerField(verbose_name='Номер', default=0, unique=True)
subject = models.CharField(verbose_name='Тема', max_length=200)
description = models.TextField(verbose_name='Описание', blank=True,
help_text='Если тема понятна, описание можно не указывать.')
date = models.DateTimeField(verbose_name='Добавлено')
type = models.CharField(verbose_name='Тип обращения', max_length=2,
default='CN', choices=INCIDENT_TYPES)
def __unicode__(self):
return u'{0} {1} {2}'.format(self.number, self.subject, self.date)
26.10.2015 Выполнил домашнее задание 33 урока
Легенда: Пользователи обращаются в службу поддержки. Все обращения пользователей фиксируются операторами. У всех полей обращений должны быть понятные русские заголовки. У всех обращений должны быть уникальные номера. Обращения у операторов должны отображаться в порядке убывания даты поступления. Обращения делятся на 3 типа: консультация, ошибка и пожелание. Оператор может указать суть обращения в теме, если она понятна и не указывать описание.
Выполненные изменения в модели:
- для всех полей добавил понятные заголовки с помощью свойства
verbose_name
- добавил в поле
number
признакunique=True
, чтобы контролировалась уникальность номеров обращений - в класс
Meta
добавил порядок по дате -ordering = ['-date']
, чтобы обращения отображались в нужном порядке - добавил перечисление
INCIDENT_TYPES
, для определения типов обращений - добавил поле
type
с выбором значения перечисленияINCIDENT_TYPES
, для указания типа обращения в обращении - добавил
default='CN'
в полеtype
для установки значения типа обращения по умолчанию - добавил для поля
description
признакblank=True
, чтобы можно было не заполнять это поле при понятной теме обращения - добавил для поля
description
признакhelp_text
, чтобы операторам отображалась подсказка про то, что описание можно не указывать при понятной теме
сlass Incident(models.Model): # Инцидент
class Meta:
db_table = 'app_info_incidents'
# Описание модели
number = models.IntegerField()
subject = models.CharField(max_length=200)
description = models.TextField(blank=True)
date = models.DateTimeField()
24.10.2015 После 30 урока убрал из поля description
признак null=True
class Incident(models.Model): # Инцидент
class Meta:
db_table = 'app_info_incidents'
# Описание модели
number = models.IntegerField(default=0)
subject = models.CharField(max_length=200)
description = models.TextField(blank=True, null=True)
date = models.DateTimeField()
Модуль views.py
# coding: utf-8
from django.shortcuts import render_to_response
from info.models import Incident
def help(request): # Работа с моделями
# Модель.менеджер.что_вывести()
incidents = Incident.objects.all()
last2 = Incident.objects.order_by('-date')[0:2]
record2 = Incident.objects.get(id=2)
return render_to_response('help.html', {'incidents': incidents, 'last2': last2, 'record2': record2})
Модуль urls.py
# coding: utf-8
from django.conf.urls import url
import info.views as views
urlpatterns = [
url(r'^help/$', views.help),
]
Шаблон help.html
{% extends 'base.html' %}
{% block content %}
Практикум по работе моделями.<br>
Включает уроки 14 и 33 плана 1.<br>
Описание выполнения уроков смотри на закладке <strong>Код</strong>.<br>
<h4>Вывод всех записей:</h4>
<table class="table table-bordered">
<tr><th>Номер</th><th>Тема</th><th>Тип обращения</th><th>Описание</th><th>Дата добавления</th></tr>
{% for incident in incidents %}
<tr><td>{{ incident.number }}</td><td>{{ incident.subject }}</td><td>{{ incident.get_type_display }}</td>
<td>{{ incident.description }}</td><td>{{ incident.date }}</td></tr>
{% endfor %}
</table>
<h4>Последние 2 записи:</h4>
<table class="table table-bordered">
{% for last in last2 %}
<tr><td>{{ last.number }}</td><td>{{ last.subject }}</td><td>{{ last.get_type_display }}</td>
<td>{{ last.description }}</td><td>{{ last.date }}</td></tr>
{% endfor %}
</table>
<h4>Только одна запись по Id=2:</h4>
<table class="table table-bordered">
<tr><td>{{ record2.number }}</td><td>{{ record2.subject }}</td><td>{{ record2.get_type_display }}</td>
<td>{{ record2.description }}</td><td>{{ record2.date }}</td></tr>
</table>
{% endblock %}
26.10.2015 Изменения в шаблоне:
- cделал более понятное описание заголовка, т.к. скорее всего эта страница мне еще понадобится для выполнения практикумов по моделям
- добавил колонку "Тип обращения" для вывода типа обращения. Для этого использовал функцию
get_type_display
, которая автоматически создала Django при добавлении поля с признакомchoices
Модуль admin.py
# coding: utf-8
from django.contrib import admin
from info.models import Incident
class IncidentAdmin(admin.ModelAdmin):
list_display = ('number', 'date', 'subject', 'type', 'description')
admin.site.register(Incident, IncidentAdmin)
26.10.2015 Добавил в отображаемую таблицу обращений все поля, которые по легенде должны видеть операторы. Для этого использовал свойство класса list_display
, в котором в кортеже указаны выводимые поля.
# coding: utf-8
from django.contrib import admin
from info.models import Incident
admin.site.register(Incident)
blog comments powered by Disqus