Django Admin Lazy Self-Referencing Dropdown - PullRequest
0 голосов
/ 25 марта 2020

У меня есть самоссылающаяся модель задач расписания, которая ссылается на другие строки в той же таблице для отношений предшественников задач.

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" имеют собственные ссылки, кроме буквального отношения "я"?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...