Как повторно использовать модель, созданную для 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).

Вернуться на верх