Как повторно использовать модель, созданную для crate too many model в Django?
У меня есть модель в models.py
в моем приложении Django :
class Personnel(models.Model):
id = models.AutoField(primary_key=True)
card_number = models.BigIntegerField()
name = models.TextField(db_collation='C')
family = models.TextField(db_collation='C')
height = models.TextField(db_collation='C', blank=True, null=True)
weight = models.FloatField(blank=True, null=True)
job_type = models.BigIntegerField(db_column='Job_Type', blank=True, null=True)
age = models.FloatField(db_column='age', blank=True, null=True)
Superviser_score = models.FloatField(db_column='Superviser_score', blank=True, null=True)
QC_score = models.FloatField(db_column='QC_score', blank=True, null=True)
def __str__(self)-> str:
return f'{self.card_number} - {self.family} - {self.name}'
class Meta:
managed = False
db_table = 'personnel'
И в admin.py
:
@admin.register(Personnel)
class MyPersonelAdmin(admin.ModelAdmin):
list_display = ['card_number','name','family','center','job_type']
Как я могу повторно использовать personenel
модель для создания слишком большого количества моделей?
Я пытаюсь использовать приведенный ниже код в models.py
для создания другой модели, но получаю ошибку:
class SuperviserModel(Personnel):
id=Personnel.id
card_number = Personnel.card_number
name = Personnel.name
family = Personnel.family
center = Personnel.center
distance = Personnel.distance
job_type = Personnel.job_type
overtime = Personnel.overtime
class Meta:
managed = False
db_table = 'personnel'
Ошибка: колонка personnel.personnel_ptr_id не существует
Не перезаписывайте атрибуты родительского класса. Модель под наблюдением - это просто:
class SupervisedModel(Personnel):
title = models.CharField(max_length=200, blank=True,)
def __str__(self)-> str:
return f'{self.card_number} - {self.title} {self.family} - {self.name}'
Затем создайте новую модель с супервизией, в которой title
будет новым атрибутом:
>>> hipdb.SupervisedModel.objects.create(card_number=1234567890, name='Henry', family='Johnson', title='Mr')
<SupervisedModel: 1234567890 - Mr Johnson - Henry>
Однако, на мой взгляд, такой подход не очень джанговый, и я бы рекомендовал подумать о привязке SupervisedModel
к Personnel
через OneToOneField
(django docs).