Лучший метод моделирования базы данных 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')