我有两个以下型号:
class Student(models.Model):
name = models.CharField(max_length=255, help_text='Name of student')
class Group(models.Model):
name = models.CharField(max_length=255, help_text="Groups' name")
elder = models.ForeignKey(Student, default=None, blank=True, null=True)
案例是我有表格(从modelForm创建),它能够更新数据库中的条目。我的问题如下:
用户可以使用ForeignKey创建两个组,这些组将指向Student
表中的一个条目。
我在文档中找到db_constraint
但似乎还不够。
获得以下行为会很棒:
当用户分配已分配给另一个模型的ForeignKey时,我想删除旧的分配并创建新的。所以Student
外键一次只能分配给一个模型。
答案 0 :(得分:2)
覆盖save
的{{1}}方法:
Group
但您必须使用交易来避免不一致
答案 1 :(得分:1)
OneToOneField
专为独特关系而设计:
class Group(models.Model):
name = models.CharField(max_length=255, help_text="Groups' name")
class Student(models.Model):
name = models.CharField(max_length=255, help_text='Name of student')
group = models.OneToOneField(Group, default=None, blank=True, null=True, related_name='elder')
请注意我是如何将关系字段移动到Student
模型的,这将为您提供所需的行为。如果它位于Group
模型上,并且您已将学生分配给新组,则会因违反DatabaseError
约束而引发unique
。在这种情况下,(唯一)FOREIGN KEY
列位于Student
的表中,因此,如果您将学生分配到另一个组并保存该组,则会更新学生表并更新旧组更换。