RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 951886
Accepted
JBlack
JBlack
Asked:2020-03-04 00:06:21 +0000 UTC2020-03-04 00:06:21 +0000 UTC 2020-03-04 00:06:21 +0000 UTC

在 Django 中创建迁移时的对象序列化问题

  • 772

在创建数据库表-“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
база-данных
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    HRL Developer
    2020-03-04T17:06:05Z2020-03-04T17:06:05Z

    看班上的线Entry

    docid = models.CharField(
        max_length=10, 
        verbose_name='Код врача', 
        default = Doctor.docid
    ) # код врача 
    

    default不能这样Doctor.docid。

    default这是默认值,docid从类Doctor中这是字段。

    如果这样做,则不会发生此错误。

    docid = models.CharField(
        max_length=10, 
        verbose_name='Код врача'
    ) # код врача 
    
    • 0

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    根据浏览器窗口的大小调整背景图案的大小

    • 2 个回答
  • Marko Smith

    理解for循环的执行逻辑

    • 1 个回答
  • Marko Smith

    复制动态数组时出错(C++)

    • 1 个回答
  • Marko Smith

    Or and If,elif,else 构造[重复]

    • 1 个回答
  • Marko Smith

    如何构建支持 x64 的 APK

    • 1 个回答
  • Marko Smith

    如何使按钮的输入宽度?

    • 2 个回答
  • Marko Smith

    如何显示对象变量的名称?

    • 3 个回答
  • Marko Smith

    如何循环一个函数?

    • 1 个回答
  • Marko Smith

    LOWORD 宏有什么作用?

    • 2 个回答
  • Marko Smith

    从字符串的开头删除直到并包括一个字符

    • 2 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5