К списку категорий

  •   Правильный и неправильный подход при изучении Django Python на примере.




  •   Описание

    видео эмоциональное, я просто хотел прокричать, как нужно делать.
    В чём собственно вопрос?
    Есть ребята, которые год занимаются и говорят так:"по примеру написать могу, а сам не могу".
    Есть люди, которые занимаются три месяца и пишут довольно сложный код.

    Сначала посмотрите видео, а потом дальше читайте статью:

     



      Статья

    Правильный и неправильный подход при изучении Django Python на примере.

    видео эмоциональное, я просто хотел прокричать, как нужно делать.
    В чём собственно вопрос?
    Есть ребята, которые год занимаются и говорят так:"по примеру написать могу, а сам не могу".
    Есть люди, которые занимаются три месяца и пишут довольно сложный код.

    Даже, если у вас получается, как в первом варианте, то не относите себя к категории плохо-хорошо.
    Вообще, не используйте эти категории для оценки.

    Важно понять есть метод обучения дающий результат стабильный, есть метод обучения,
    не дающий стабильный результат.
    Задача этого видео разъяснить на примере, как заниматься по методу дающему результат и
    чем он отличается от метода не дающего результат.
    Вы уже наверное поняли, вам просто нужно будет немного подкорректировать действия и вы получите желаемый результат в любом языке программирования.

     

    ссылка на эту статью в группе (для учатников)


    Ссылки, которые использовались в видео:

    Как правильно изучать Django? Другие методики не работают.
    https://spb-tut.ru/guest/pages/294/

    Хотите стать программистом? Читайте.
    https://spb-tut.ru/reviews/



      Код

    Обратите внимание это пример кода, но не проект джанго, так как все файлы находятся на одной странице.

    
    # -*- coding: utf-8 -*-
    
    from django.db import models
    
    
    
    class Category(models.Model):  # модель
        class Meta:
            verbose_name = 'Категория'  # Так будет назваться таблица в админке ед. число
            verbose_name_plural = 'Категория'  # Так будет назваться таблица в админке мн. число
    
        rang = models.CharField(max_length=120, verbose_name='Категория', unique=True,
                                help_text='Ранг учебного заведения', default='Гос.школа')
        """
        models.CharField малое текстовое поле со следующими характерискикати:
        max_length - обязательный параметр
        verbose_name - так будет назваться наш столбец в таблице
        unique - означает что данное поле уникальное, т.е. эта категория будет единственной
        help_text - подсказвает пользователь что нужно занести в поле (информационная подсказка)
        default - по умолчанию в этом поле выставлено это значение == 'Гос.школа'
        """
    
        def __str__(self):  # Python 3
            return self.rang  # Корректное отображение в таблицы сохранненного объекта
    
    
    class NameSchool(models.Model):
        class Meta:
            verbose_name = 'Название школы'
            verbose_name_plural = 'Название школы'
            ordering = ['name']  # Сортировка будет происходить по возрастарию по полю == name
    
        name = models.CharField(max_length=30, help_text='Введите названи заведения', verbose_name='Название')
        rank = models.CharField(max_length=200, help_text='Введите звания', verbose_name='Звания', blank=True)
        # blank=True означает что это поле можно не заполнять и оно корректно сохраниться
    
        def __str__(self):
            return self.name
    
    
    class Address(models.Model):
        class Meta:
            verbose_name = 'Адрес'
            verbose_name_plural = 'Адрес'
    
        srteet = models.CharField(max_length=200, help_text='Введити улицу и строениу', verbose_name='Улица')
        region = models.CharField(max_length=200, help_text='Введите микрорайон', verbose_name='Район')
        email = models.EmailField(help_text='Почта школы', blank=True)
        internet = models.URLField(max_length=200, help_text='Сайт школы', verbose_name='Сайт', blank=True)
        # models.EmailField поле для коректного внесения емейла (проверяет наличие@)
        # models.URLField поле для url адреса
    
        def __str__(self):
            return self.srteet
    
    
    class Teacher(models.Model):
        CHOICES = (
            ('ОТ', 'Отпуск',),
            ('БЛ', 'Бальничный лист'),  # итератор из картежей значиени ОТ,БЛ,РБ сохраняются в БД и по им будет
            ('РБ', 'Работает'),         # пользователь выбирать в поле  **state**
        )
    
        class Meta:
            verbose_name = 'Учителя'
            verbose_name_plural = 'Учителя'
    
        personal = models.CharField(max_length=120, verbose_name='Сотрудник', help_text='Имя Отчество')
        subject = models.CharField(max_length=50, verbose_name='Предмет', help_text='Наименование предмета')
        rank = models.CharField(max_length=200, verbose_name='Звания', blank=True,
                                help_text='профессор, доктор наук, учитель года')
        status = models.BooleanField(blank=True)
        state = models.CharField(max_length=2, choices=CHOICES, default='РБ')
        # models.BooleanField(blank=True) булево поле может быть не активно
    
        def __str__(self):
            return self.personal
    
    
    class Children(models.Model):
        class Meta:
            verbose_name = 'Ученики'
            verbose_name_plural = 'Ученики'
    
        students = models.CharField(length=88, verbose_name='Учащиеся', help_text='Имя')
        age = models.IntegerField(blank=True, null=True)
        # models.IntegerField(blank=True, null=True) числовое поле blank и null обязательны для корректной работы
        # если мы хотим чтобы поле могло сохраняться пустыь
    
        def __str__(self):
            return self.students
    
    
    class RoomClass(models.Model):
        class Meta:
            verbose_name = 'Класс'
            verbose_name_plural = 'Класс'
            ordering = ['-number']  # сортировка в обратном порядке по полю number
    
        number = models.CharField(max_length=10, verbose_name='Номер класса', help_text='Введите класс')
        floor = models.IntegerField(blank=True, null=True)
    
        def __str__(self):
            return self.number
    
    
    class School(models.Model):
        class Meta:
            verbose_name = 'Школа'
            verbose_name_plural = 'Школа'
            ordering = ['nominal']
    
        category = models.ForeignKey(Category, verbose_name='Категория', on_delete=models.Cascade)  # многое к одному
        nominal = models.ForeignKey(NameSchool, verbose_name='Название')
        address = models.ForeignKey(Address, verbose_name='Адрес')
        teacher = models.ManyToManyField(Teacher, related_name='working', verbose_name='Учителя')  # многое к многомн
        children = models.ManyToManyField(Children, verbose_name='Ученики')
        room = models.ManyToManyField(RoomClass, verbose_name='Класс')
        director = models.CharField(max_length=200, help_text='Ф.И.О', verbose_name='Директор')
        work = models.BooleanField(blank=True, verbose_name='Работает')
        building = models.CharField(max_length=50, default='3-х этажное', verbose_name='Здание')
        # related_name по названию working мы можем осуществлять обратную связь со связанной моделью
        # т.е. можем выбирать данные из ее что то подобное на менеджер модели
    
        def __str__(self):
            return str(self.nominal)  # так как объет числовой наличие str обязательно
    
    
    views.py
    
    from django.shortcuts import render
    from .models import Category, School
    
    
    def category(request):
        category = Category.objects.all()
        return render(request, 'category.html', {'category': category})
    
    
    def one(request, one_id):
        context_dict = {}
    
        try:
            category = Category.objects.get(pk=one_id)
            context_dict['cotegory_rang'] = category.rang
    
            one = School.objects.filter(category=category)
            context_dict['one'] = one
            context_dict['category'] = category
    
        except Category.DoesNotExist:
            pass
    
        return render(request, 'one.html', context_dict)
    
    
    def only_one(request, only_one_id):
        only_one = School.objects.get(pk=only_one_id)
        return render(request, 'only.html', {'only_one': only_one})
    
    
    category.html
    
    {%extends 'base.html'%}
    {%load staticfiles%}
    
    {%block content%}
    
    

    Все категории

    {%if category%} {%else%} Нет категорий {%endif%} {%endblock%} one.html {%extends 'base.html'%} {%load staticfiles%} {%block content%}

    {{category_rang}}

    {%if category%} {%else%} Нет записей в этой категории {%endif%} {%else%} Нет такой категории {{category_rang}} {%endif%} {%endblock%} only.html {%extends 'base.html'%} {%load staticfiles%} {%block content%}

    Категория: {{only_one.category}}

    Название: {{only_one.nominal}}

    Адресс: {{only_one.address}}

    Преподователи:

    {%for list in only_one.teacher.all%} {{list.personal}} {%if not forloop.last%}, {%else%}{%endif%} {%endfor%}

    Школьники:

    {%for list in only_one.children.all%} {{list.students}} {%if not forloop.last%}, {%else%}{%endif%} {%endfor%}

    Классы:

    {%for list in only_one.room.all%} {{list.number}} {%if not forloop.last%}, {%else%}{%endif%} {%endfor%}

    Директор школы: {{only_one.director}}

    Статус: {{only_one.work}}

    Этажность:{{only_one.building}}



      Рекомендации

    Узнать больше в ленте Twitter и подписаться на Ютуб, получать новые видео.



    Kotlin + Android + blockchain, разработки приложений с нуля.
    Создание приложений в Android Studio на языке программирования Kotlin. Подробное руководство.

    http://kotlinlang.spb-tut.ru/
    быстрый старт
    http://kotlinlang.spb-tut.ru/info/fast_start/


    Блокчейн с нуля + Python + Solidity. Программирование, обучение, разработка смарт контрактов.

    Онлайн школа Blockchain,
    для начинающих программистов от
    В. Бовсуновского.

    Быстрый старт
    http://blockchain.spb-tut.ru/blockchain-plus-python/quick-start-blockchain/



    2018-09-28 19:35:15+00:00



    К списку категорий