Модель для тэгов. Модель для тэгов. django python yml tag tags model

Модель для тэгов.

Open in new window

Создаем модель

class Tag(models.Model): 
    name = models.CharField(max_length=50, db_index=True)
    alias =  models.CharField(max_length=250, db_index=True)

Мигрируем

./manage.py makemigrations
./manage.py migrate

Создаем новую команду (файл myapp/management/commands/load_tags.py)

# -*- coding: utf-8 -*-
import logging
from optparse import make_option
from django.core.exceptions import ObjectDoesNotExist
from django.core.management.base import BaseCommand
from course.models import Tag

import os
import sys
import yaml
print("Start process")
from wm.settings import DATA_DIR
LANGS = ['ru','en']

def process_tags():
    dirs = os.listdir(DATA_DIR)
    for d in dirs:
        out_data = {}
        if os.path.isdir('%s/%s' % (DATA_DIR, d)):
            print("process with %s" % d)
            for l in LANGS:
                langpath = os.path.join(DATA_DIR,d,l)
                if  os.path.isdir(langpath):
                    for inl in os.listdir(langpath):
                        les_path = os.path.join(langpath,inl)
                        yml_path = les_path+'/meta.yml'
                        if os.path.isfile(yml_path):
                            with open(yml_path,'r') as file:
                                yml = yaml.load(file.read())
                            for fl in yml['files']:
                                try:
                                    keys = fl['meta_keywords']
                                    out_data[fl['file']] = fl['meta_keywords'].split(' ')
                                    print(keys)
                                except:
                                    print("NO keywords!")
    return out_data

class Command(BaseCommand):

    def handle(self, *args, **options):
        print("Deleting all tags")
        Tag.objects.all().delete()
        print 'Importing TAGS'
        tags =  process_tags()
        for tag in tags:
            for t in tags[tag]:
                nt = Tag()
                nt.name = t
                nt.alias = tag.replace('.md','')
                nt.save()
                print("Saving ... %s" % t)

При этом копируем ф-цию из предыдущего урока и используем ее с некоторыми изменениями:

if  os.path.isdir(langpath):

Проверка на существование каталога.

Other topics