我在我的模型中定义了两个OneToOneFields,如下所示:
class StudentCrossMap(models.Model):
rfId = models.OneToOneField(StudentDailyTrans)
studentId = models.OneToOneField(StudentMaster)
当我在上面提供rfId
的模型上应用删除时,StudentDailyTrans
中与其相关的条目会被删除,但StudentMaster
中的条目未被删除。
理想情况下,如果我从StudentCrossMap
删除对象,则不应该从映射表中删除条目,因为这些表不依赖于StudentCrossMap
表。
请告知我是否做错了。
*编辑:相关表格
class StudentDailyTrans(models.Model):
rfId = models.CharField(max_length=30, primary_key=True)
schoolId = models.ForeignKey(SchoolMaster, on_delete=models.CASCADE, db_index=False)
fromTime = models.DateTimeField(null=True)
toTime = models.DateTimeField(null=True)
totalSwipeInstance = models.IntegerField(default=0)
lastUpdateTs = models.DateTimeField(auto_now=True)
class StudentMaster(models.Model):
studentId = models.IntegerField(primary_key=True)
schoolId = models.ForeignKey(SchoolMaster, on_delete=models.CASCADE)
parentId = models.ForeignKey(ParentMaster, on_delete=models.CASCADE)
class SchoolMaster(models.Model):
schoolId = models.IntegerField(primary_key=True)
subsStrtDt = models.DateTimeField(default=timezone.now)
class ParentMaster(models.Model):
parentId = models.AutoField(primary_key=True)
parentName = models.CharField(max_length=20, default='parent')
答案 0 :(得分:2)
如果我已经理解了你发布的内容,你最好选择这样的设计。
class Student(models.Model):
id = models.IntegerField(primary_key=True)
school = models.ForeignKey(SchoolMaster, on_delete=models.CASCADE)
parent = models.ForeignKey(ParentMaster, on_delete=models.CASCADE)
rf = models.CharField(max_length=30, primary_key=True)
这基本上就是您原来的StudentMaster
模型。我已将其重命名为Student。我还重命名了字段名称以符合通常的django命名约定(学校而不是外键的school_id)
现在,您可以删除StudentDailyTrans
和StudentCrossMap
我们正在更有效地保存相同的数据,但没有冗余。这消除了你问的问题!!
您同意我的说法,代码更具可读性。