У меня есть самоссылающаяся модель задач расписания, которая ссылается на другие строки в той же таблице для отношений предшественников задач.
class ScheduleTemplateTasks(models.Model):
schedule_template_id = models.ForeignKey(ScheduleTemplate)
task = models.CharField(max_length=50, db_index=True)
duration = models.PositiveIntegerField()
pred1id = models.IntegerField(null=True, blank=True, db_index=True)
pred1lag = models.IntegerField(null=True, blank=True)
pred2id = models.IntegerField(null=True, blank=True, db_index=True)
pred2lag = models.IntegerField(null=True, blank=True)
pred3id = models.IntegerField(null=True, blank=True, db_index=True)
pred3lag = models.IntegerField(null=True, blank=True)
pred4id = models.IntegerField(null=True, blank=True, db_index=True)
pred4lag = models.IntegerField(null=True, blank=True)
pred5id = models.IntegerField(null=True, blank=True, db_index=True)
pred5lag = models.IntegerField(null=True, blank=True)
class JobScheduleTasks(models.Model):
job = models.ForeignKey(Job, on_delete=models.CASCADE)
task = models.CharField(max_length=50, db_index=True)
duration = models.PositiveIntegerField()
pred1id = models.IntegerField(null=True, blank=True, db_index=True)
pred1lag = models.IntegerField(null=True, blank=True)
pred2id = models.IntegerField(null=True, blank=True, db_index=True)
pred2lag = models.IntegerField(null=True, blank=True)
pred3id = models.IntegerField(null=True, blank=True, db_index=True)
pred3lag = models.IntegerField(null=True, blank=True)
pred4id = models.IntegerField(null=True, blank=True, db_index=True)
pred4lag = models.IntegerField(null=True, blank=True)
pred5id = models.IntegerField(null=True, blank=True, db_index=True)
pred5lag = models.IntegerField(null=True, blank=True)
baseline_start_date = models.DateField(null=True, blank=True)
planned_start_date = models.DateField(null=True, blank=True, db_index=True)
actual_start_date = models.DateField(null=True, blank=True, db_index=True)
baseline_end_date = models.DateField(null=True, blank=True)
planned_end_date = models.DateField(null=True, blank=True, db_index=True)
actual_end_date = models.DateField(null=True, blank=True, db_index=True)
При создании фактического расписания заданий я копирую построчно ScheduleTemplateTasks сохранение списка исходных идентификаторов задач и вновь создаваемых идентификаторов для JobScheduleTask. Когда все строки в модели JobScheduleTasks, я прокручиваю список, обновляя все поля «pred # id» до новых значений id вновь созданных JobScheduleTasks, чтобы сохранить фактические отношения предшественника.
У меня были эти «пред Поля #id изначально были заданы как поля с самоссылкой, но во время создания новых заданий JobScheduleTasks соответствующие идентификаторы не существовали в базе данных - поэтому вставки не будут выполнены. Поэтому я удалил самоссылку и сохранил их как простые целочисленные поля.
Можно ли как-то сказать Django Admin, что эти поля "pred # id" имеют собственные ссылки, кроме буквального отношения "я"?