【发布时间】:2022-07-25 02:20:04
【问题描述】:
假设我的 Django 应用程序中有以下父模型:
class Location(models.Model):
name = models.CharField(max_length=100)
class Exit(models.Model):
location = models.ForeignKey(Location, on_delete=models.CASCADE, related_name="exits")
closed = models.BooleanField()
还有两对对应的子模型:
class Submarine(Location):
size = models.FloatField()
class Hatch(Exit):
diameter = models.FloatField()
class House(Location):
height = models.FloatField()
class Door(Exit):
width = models.FloatField()
height = models.FloatField()
在此设置中,House 可以将Hatch 作为其Exits 之一,Submarine 可以拥有Door。有没有办法明确防止这种情况发生?理想情况下,我希望在尝试设置无效外键时抛出异常。
将location 字段从Exit 移动到Hatch 和Door 不是一种选择,因为我希望能够使用如下结构:
open_locations = Location.objects.filter(exits__closed=False)
并避免重复(即为 Houses 和 Submarines 编写单独的函数)。
也许limit_choices_to 约束可能会有所帮助,但我不知道如何在此处应用它。
【问题讨论】:
标签: python django validation model