Лучший метод моделирования базы данных django с использованием сквозной таблицы для доступа к ассоциациям по дате

Ищем совета по аккуратному решению для доступа

Конечным результатом, который я ищу, является следующий отчет:

cast, start_date, wire, winch

В настоящее время я запускаю скрипт при отправке объекта cast через форму, чтобы получить активный провод, связанный с cast, и сохранить его в поле внешнего ключа 'wire'. Доступ к активному проводу в скрипте осуществляется через теги свойств. Технически эта информация хранится в базе данных через серию моделей, связывающих каст с проводом (Cast-DrumLocation-WireDrum), и поля даты, в которых хранится информация о том, когда произошли эти события. Эти события обновляют ассоциацию между кастом и проводом.

Является ли то, как я смоделировал это, правильным решением?, или есть другие решения, где проводной внешний ключ не нужно хранить как поле в кастомной модели.

class Cast(models.Model):
    id = models.AutoField(db_column='Id', primary_key=True)    
    startdate = models.DateTimeField(db_column='StartDate')  
    enddate = models.DateTimeField(db_column='EndDate')  
    wire = models.ForeignKey('Wire', models.DO_NOTHING, db_column='WireId')  
    winch = models.ForeignKey('Winch', models.DO_NOTHING, db_column='WinchId')  

class Drum(models.Model):
    id = models.AutoField(db_column='Id', primary_key=True\)  
    location = models.ManyToManyField(Location, through='DrumLocation', related_name='active_location')
    material = models.TextField(db_column='Material')  
    wiretype = models.TextField(db_column='WireType')    

class Winch(models.Model):
    id = models.AutoField(db_column='Id', primary_key=True)  
    name = models.TextField(db_column='Name')
    drums = models.ManyToManyField(Drum, through='Drumlocation', related_name='active_drum')

class Wire(models.Model):
    id = models.AutoField(db_column='Id', primary_key=True)  
    nsfid = models.TextField(db_column='NsfId')  
    drums = models.ManyToManyField(Drum, through='WireDrum', related_name='loaded_wires')

class DrumLocation(models.Model):
    id = models.AutoField(db_column='Id', primary_key=True)  
    date= models.DateField(db_column='Date')  
    drumid = models.ForeignKey(Drum, models.DO_NOTHING, db_column='DrumId')  
    winch = models.ForeignKey(Winch, models.DO_NOTHING, db_column='WinchId')  
    location = models.ForeignKey(Location, models.DO_NOTHING, db_column='LocationId')  
    wire = models.ForeignKey(Wire, models.DO_NOTHING, db_column='WireId')  

class Wiredrum(models.Model):
    id = models.AutoField(db_column='Id', primary_key=True, blank=True, null=False)  
    drum = models.ForeignKey(Drum, models.DO_NOTHING, db_column='DrumId', related_name='reverse_drum')  
    wire = models.ForeignKey(Wire, models.DO_NOTHING, db_column='WireId')  
    date = models.DateField(db_column='Date')  
Вернуться на верх