【发布时间】:2013-07-10 14:10:48
【问题描述】:
我想在两个外键字段上允许 null。
但是这两个字段不能同时为空。
实际上,必须随时设置一个。
我该如何表达?
外键引用的两个表不一样。
【问题讨论】:
-
这通常是子类型化的设计反模式。 How can you represent inheritance in a database?
标签: django foreign-keys constraints
我想在两个外键字段上允许 null。
但是这两个字段不能同时为空。
实际上,必须随时设置一个。
我该如何表达?
外键引用的两个表不一样。
【问题讨论】:
标签: django foreign-keys constraints
您可以使用以下方法:
Class TestModel(models.Model):
forgein_key_1 = models.ForeignKey(YourModel)
forgein_key_2 = models.ForeignKey(YourOtherModel)
并将保存方法覆盖为:
def save(self, *args, **kargs):
if not (self.forgein_key_1 or self.forgein_key_2):
raise Exception("Your Custom Exception Message here")
super(self, TestModel).save(*args, **kargs)
【讨论】:
您无法通过在模型字段上添加内容来实现此目的。您必须将此逻辑放入您的save()。
class MyModel(models.Model):
fk1 = models.ForeignKey(Some, null=True)
fk2 = models.ForeignKey(Other, null=True)
def save(self, *args, **kwargs):
if not fk1 and not fk2:
raise Exception("You can't leave both fields as null")
super(self, MyModel).save(*args, **kwargs)
【讨论】:
clean方法中进行验证吗?