繁体   English   中英

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

[英]Maintaining multiple instance of the same object in 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(主题)来覆盖。 我该如何实施?

据我了解,您有每个检查点的清单。 您想选择哪个检查点适用于每个特定批次。

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

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)    
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与说明。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM