
[英]Django queryset search on multiple models, return the same object
[英]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模型,我添加了ForeignKey
和ManyToManyField
与说明。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.