在Django模型中维护同一对象的多个实例

时间:2019-05-22 17:30:52

标签: django django-models

我正在Django中创建一个小型应用程序,我需要在其中维护不同课程的培训批次的详细信息。这些批次中的每一个都有要涵盖的主题列表。例如,蟒蛇课程可以由不同学院的不同培训人员同时进行,因此他们俩都有自己的主题列表。以下是我的想法,但认为我错了。我对如何处理感到困惑。请提出正确的方法。

到目前为止,我的模型,

class Course(models.Model):
    name = models.CharField(max_length=50, default="Enter Course Name")

class Trainer(models.Model):
    name = models.CharField(max_length=50, default="Enter Trainer Name")

class College(models.Model):
    name = models.CharField(max_length=50, default="Enter College Name")

class CourseBatch(models.Model):
    startDate = models.DateField(null = True, blank = True)
    endDate = models.DateField(null = True, blank = True)
    batchName = models.CharField(max_length=50, default="Enter Batch Name")
    course = models.ForeignKey(Course, on_delete=models.CASCADE, related_name="course")
    trainer = models.ForeignKey(Trainer, on_delete=models.CASCADE, related_name="trainer")
    college = models.ForeignKey(College, on_delete=models.CASCADE, related_name="college")

class CheckPoints(models.Model):
    description = models.CharField(max_length=50, default="Enter Description")
    chkPoint = models.BooleanField(default=False)    
    course = models.ForeignKey(Course, on_delete=models.CASCADE, related_name="course")

class ChkListForBatch(models.Model):
    batch = models.ForeignKey(CourseBatch, on_delete=models.CASCADE, related_name="coursebatch")
    chkpoint = models.ForeignKey(CheckPoints, on_delete=models.CASCADE, related_name="chkpoint")

这里,每个CourseBatch都需要具有自己的一组CheckPoint(主题)以供覆盖。我该如何实现呢?

2 个答案:

答案 0 :(得分:0)

据我了解,您有每个检查点的检查点列表。然后,您要选择针对每个特定批次的检查点。

已更新。如果要保存完成的控制点,请执行以下操作:

class Course(models.Model):
    name = models.CharField(max_length=50, default="Enter Course Name")

class Trainer(models.Model):
    name = models.CharField(max_length=50, default="Enter Trainer Name")

class College(models.Model):
    name = models.CharField(max_length=50, default="Enter College Name")

class CourseBatch(models.Model):
    startDate = models.DateField(null = True, blank = True)
    endDate = models.DateField(null = True, blank = True)
    batchName = models.CharField(max_length=50, default="Enter Batch Name")
    course = models.ForeignKey(Course, on_delete=models.CASCADE, related_name="course")
    trainer = models.ForeignKey(Trainer, on_delete=models.CASCADE, related_name="trainer")
    college = models.ForeignKey(College, on_delete=models.CASCADE, related_name="college")

class CheckPoints(models.Model):
    description = models.CharField(max_length=50, default="Enter Description")
    course = models.ForeignKey(Course, on_delete=models.CASCADE, related_name="course")

class ChkListForBatch(models.Model):
    batch = models.ForeignKey(CourseBatch, on_delete=models.CASCADE, related_name="coursebatch")
    checkpoint = models.ForeignKey(CheckPoints, on_delete=models.CASCADE, related_name="chkpoint")
    checkpoint_is_done = models.BooleanField(default=False)    

答案 1 :(得分:0)

class Course(models.Model):
    name = models.CharField(max_length=50, default="Enter Course Name")

class Trainer(models.Model):
    name = models.CharField(max_length=50, default="Enter Trainer Name")

class College(models.Model):
    name = models.CharField(max_length=50, default="Enter College Name")

class CourseBatch(models.Model):
    startDate = models.DateField(null = True, blank = True)
    endDate = models.DateField(null = True, blank = True)
    batchName = models.CharField(max_length=50, default="Enter Batch Name")
    course = models.ForeignKey(Course, on_delete=models.CASCADE, related_name="course")
    trainer = models.ForeignKey(Trainer, on_delete=models.CASCADE, related_name="trainer")
    college = models.ForeignKey(College, on_delete=models.CASCADE, related_name="college")

class CheckPoints(models.Model):
    description = models.CharField(max_length=50, default="Enter Description")
    chkPoint = models.BooleanField(default=False)    
    course = models.ForeignKey(Course, on_delete=models.CASCADE, related_name="course")
    course_batch = models.ForeignKey(to=CourseBatch, on_delete=models.CASCADE) # This means that you have multiple checkpoints associated with single coursebatch.
    course_batch_m2m = models.ManyToManyField(to=CourseBatch) # This will create intermediate model, with columns checkpoints_id | coursebatch_id. This means multiple checkpoints has multiple coursebatch and vice-versa.

class ChkListForBatch(models.Model):
    batch = models.ForeignKey(CourseBatch, on_delete=models.CASCADE, related_name="coursebatch")
    chkpoint = models.ForeignKey(CheckPoints, on_delete=models.CASCADE, related_name="chkpoint")

检查CheckPoints模型,我在ForeignKeyManyToManyField中添加了解释符。

相关问题