在创建数据库表-“makemigrations”的操作过程中,系统发出以下关于序列化问题的消息:
Идет выполнение: manage.py check
System check identified no issues (0 silenced).
Идет выполнение: manage.py makemigrations
Migrations for 'app':
app\migrations\0001_initial.py
- Create model Destination
- Create model Doctor
- Create model Entry
....
полный список всех таблиц из models.py
Traceback (most recent call last):
File "...\DjangoWeb\manage.py", line 17, in <module>
execute_from_command_line(sys.argv)
File "...\DjangoWeb\env\lib\site-packages\django\core\management\__init__.py", line 364, in execute_from_command_line
utility.execute()
File "Z:\Documents\_Works\ГП16\Entries\Diagnostic-Entries-Django\DjangoWeb\env\lib\site-packages\django\core\management\__init__.py", line 356, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "...\DjangoWeb\env\lib\site-packages\django\core\management\base.py", line 283, in run_from_argv
self.execute(*args, **cmd_options)
File "...\DjangoWeb\env\lib\site-packages\django\core\management\base.py", line 330, in execute
output = self.handle(*args, **options)
File "Z:\Documents\_Works\ГП16\Entries\Diagnostic-Entries-Django\DjangoWeb\env\lib\site-packages\django\core\management\commands\makemigrations.py", line 193, in handle
self.write_migration_files(changes)
File "...\DjangoWeb\env\lib\site-packages\django\core\management\commands\makemigrations.py", line 231, in write_migration_files
migration_string = writer.as_string()
File "...\DjangoWeb\env\lib\site-packages\django\db\migrations\writer.py", line 163, in as_string
operation_string, operation_imports = OperationWriter(operation).serialize()
File "...\DjangoWeb\env\lib\site-packages\django\db\migrations\writer.py", line 120, in serialize
_write(arg_name, arg_value)
File "...\DjangoWeb\env\lib\site-packages\django\db\migrations\writer.py", line 72, in _write
arg_string, arg_imports = MigrationWriter.serialize(item)
File "...\DjangoWeb\env\lib\site-packages\django\db\migrations\writer.py", line 293, in serialize
return serializer_factory(value).serialize()
File "...\DjangoWeb\env\lib\site-packages\django\db\migrations\serializer.py", line 44, in serialize
item_string, item_imports = serializer_factory(item).serialize()
File "...\DjangoWeb\env\lib\site-packages\django\db\migrations\serializer.py", line 229, in serialize
return self.serialize_deconstructed(path, args, kwargs)
File "...\DjangoWeb\env\lib\site-packages\django\db\migrations\serializer.py", line 101, in serialize_deconstructed
arg_string, arg_imports = serializer_factory(arg).serialize()
File "...\DjangoWeb\env\lib\site-packages\django\db\migrations\serializer.py", line 396, in serializer_factory
"topics/migrations/#migration-serializing" % (value, get_docs_version())
ValueError: Cannot serialize: <django.db.models.query_utils.
DeferredAttribute object at 0x0000025CC6A0E940>
There are some values Django cannot serialize into migration files.
For more, see
https://docs.djangoproject.com/en/1.11/topics/migrations/#migration-serializing
----------------------------------
Идет выполнение: manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying sessions.0001_initial... OK
>>>
应用迁移没有抛出任何异常!但是,用户模型表实际上并未在数据库中创建。仅创建了与身份验证等相关的 jang 表。
告诉我为什么没有创建“makemigrations”时列出的模型表,这可能是什么原因?
模型.py
from django.db import models
# my import
from django.contrib.auth.models import User
from django.utils import timezone
# Модель Имён
class Name(models.Model):
name = models.CharField(max_length=30, verbose_name="Имя") # для ФИО
# Модель Фамилий
class Surname(models.Model):
surname = models.CharField(max_length=30, verbose_name="Фамилия") # для ФИО
# Модель Отчеств
class Midname(models.Model):
midname = models.CharField(max_length=30, verbose_name="Отчество") # для ФИО
# модель ФИО - абстрактная
class FIO(models.Model):
surname = models.ManyToManyField(Surname, verbose_name="Фамилия")
name = models.ManyToManyField(Name, verbose_name="Имя")
midname = models.ManyToManyField(Midname, verbose_name="Отчество", blank=True, default='')
class Meta:
abstract = True
# модель - "Врач"
class Doctor(FIO):
docid = models.CharField(max_length=10, verbose_name='Код врача') # код врача
department = models.CharField(max_length=15, verbose_name='Отделение') # отделение
telm = models.CharField(max_length=12, blank=True, verbose_name='Моб. тел', default='') # мобильный
telw = models.CharField(max_length=12, blank=True, verbose_name='Гор. тел.', default='') # городской
tels = models.CharField(max_length=3, blank=True, verbose_name='Внутр. тел', default='') # внутренний
def __str__(self):
# Строка для представления объекта модели. String for representing the Model object.
return 'Врач: {0} {1} {2}, код: {3}, тел-ны: раб. {4}, внутр. {5}, моб. {6}'.format(self.surname, self.name, self.midname, self.docid, self.telw, self.tels, self.telm)
# модель - "подрядное ЛПУ или диагностический центр"
class Med_agency(models.Model):
name = models.CharField(max_length=100, blank=True)
address = models.CharField(max_length=100, blank=True)
# модель - класс "Тип заявки" ???
class EntryType(models.Model):
type = models.CharField(max_length=50, verbose_name="Тип диагностики")
shortType = models.CharField(max_length=3, verbose_name="Тип (сокращённо)")
# модель - "Тип специализации по нозологиям"
class Nozology(models.Model):
nozology = models.CharField(max_length=50, help_text = "Нозологии")
def __str__(self): # Строка для представления объекта модели
return "{0}".format(self.nozology)
# модель - "тип назначения (диагностика, консультация)"
class Destination(models.Model):
destination = models.CharField(max_length=50, verbose_name="Назначения")
# модель - "Локализации МРТ, МСКТ"
class Localisation(models.Model):
localType = models.CharField(max_length=10, verbose_name="Технология ", default='', blank=True)
localisation = models.CharField(max_length=50, verbose_name="Локализация", default='', blank=True)
def __str__(self):
return "Локализация: {0}, {1}".format(localType, localisation)
class UserProfile(models.Model): # Пользователь системы
user = models.OneToOneField('auth.User', verbose_name="Пользователь", on_delete=models.CASCADE)
isActive = models.BooleanField(verbose_name="Активен?", default=False) # отметка о активности
# модель - "Заявка"
class Entry(FIO):
author = models.ManyToManyField('auth.User', verbose_name='Заявку оформил') # Автор заполнения - инициализируется автоматически по входу в систему
dateReg = models.DateField('Дата регистрации', default=timezone.now, ) # дата регистрации
entryNumber = models.CharField(max_length=10, verbose_name='Номер заявки')
entryType = models.CharField(max_length=20, verbose_name='Тип заявки')
patient_dateBurn = models.DateField('Дата рождения')
patient_weight = models.PositiveSmallIntegerField(verbose_name="Вес", blank=True, null=True) # вес
patient_card = models.CharField(max_length=9, verbose_name="№ мед. карты", blank=True, default='') # номер мед. карты
patient_tel = models.CharField(max_length=12, verbose_name="Телефон", blank=True, default='') # любой телефон
doctor = models.ForeignKey(Doctor, verbose_name='Врач' ) # врач , on_delete=models.PROTECT , on_delete=models.SET_DEFAULT, default='Не активен'
docid = models.CharField(max_length=10, verbose_name='Код врача', default = Doctor.docid) # код врача
diagnose = models.TextField('Диагноз', default='') # диагноз
diagnoseMKB = models.CharField('Диагноз МКБ', max_length=10, default='') # диагноз МКБ
diagnoseDate = models.DateTimeField('Дата установки диагноза', default='') # дата установки диагноза
comment = models.TextField('Комметарий', default='', blank=True) # комментарий о пациенте, заявке, прохождении и т.д.
dateReserch = models.DateField(verbose_name='Назначенная дата', default='') # дата диагностики
timeReserch = models.TimeField(verbose_name='Назначенное время', default='') # время диагностики
orderNumber = models.CharField('№ наряда', max_length=10, default='') # номер наряда
readyMark = models.BooleanField(default=False, verbose_name="Пройдено") # отметка о прохождении СТАТУС заявки
remindDate = models.DateField('Позвонить пациенту', default='', blank=True) # дата напоминания
destination = models.CharField('Назначение', max_length=25)
nozology = models.CharField('Нозология', max_length=25)
localisation = models.ManyToManyField(Localisation, verbose_name='Локализация', default='', blank=True) # локализации МРТ и МСКТ
med_agency = models.ForeignKey(Med_agency, verbose_name='Мед. учреждение') # ЛПУ или диагностический Центр
class Meta:
verbose_name = "Заявка"
verbose_name_plural = "Заявки"
# ordering = [Doctor.surname, str(Doctor.name)[0], str(Doctor.midname)[0]]
ordering = ['-dateReg']
def __str__(self):
return "Заявка №{0}, {1}, {11}, Врач: {2} {3}{4} код: {5}, пациент: {6} {7}{8}, адрес: {9}, тел: {10}".format(str(self.id + self.entryType.shortType), self.dateReg,
self.doctor.surname, str(self.doctor.name)[0], str(self.doctor.midname)[0], self.doctor.docid, self.patient.surname, str(self.patient.name)[0],
str(self.patient.midname)[0], self.patient.address, self.tel, self.entryType.type)
# модель - "Пациент"
class Patient(models.Model):
surname = Entry.surname #models.CharField(max_length=50, verbose_name='Фамилия')
name = Entry.name # models.CharField(max_length=50, verbose_name='Имя') # ФИО
midname = Entry.midname # models.CharField(max_length=50, default='', blank=True, verbose_name='Отчество')
dateBurn = models.DateField('Дата рождения') #
weight = models.PositiveSmallIntegerField(verbose_name="Вес", blank=True, null=True) # вес
medpolice = models.CharField(max_length=100, verbose_name="№ мед. полиса", blank=True, default='') # полис ОМС
card = models.CharField(max_length=9, verbose_name="№ мед. карты", blank=True, default='') # номер мед. карты
address = models.CharField(max_length=100, verbose_name="Адрес проживания", blank=True, default='') # адрес
tel = models.CharField(max_length=12, verbose_name="Телефон", blank=True, default='') # любой телефон
def __str__(self): # Строка для представления объекта модели
return 'Пациент: {0} {1} {2}, полис МС: {3}, мед.карта: {4}, адрес: {5}, тел: {6}'.format(self.surname,
self.name, self.midname, self.medpolice, self.card, self.address, self.tel1)
class logger (models.Model):
pass
看班上的线
Entrydefault不能这样Doctor.docid。default这是默认值,docid从类Doctor中这是字段。如果这样做,则不会发生此错误。