我正在使用Django Admin,并且具有这样的模型:
class Item(models.Model):
id = models.CharField(max_length=14, primary_key=True)
otherId = models.CharField(max_length=2084, blank=True)
我希望ID是必填且唯一的,并且我希望Admin表单上的otherId是可选的,但是如果提供了otherId,则它必须是唯一的。
我遇到的问题是,每当我使用Admin表单创建Item的实例并且不提供otherId时,Django都会尝试将otherId字段另存为空白值,但这意味着我第二次尝试保存具有空白otherId值的实例时,它将违反列的唯一约束并失败。
我需要Django在保存之前检查otherId字段是否为falsey,如果为falsey,请不要将该空值与模型一起保存。这可能吗?
答案 0 :(得分:1)
您应将unique=True
添加到otherId字段。
otherid = models.CharField(max_length=2084, blank=True, null=True, unique=True)
如果otherId为空,则Django忽略唯一性。
答案 1 :(得分:0)
我不能很好地理解这个问题,但是我认为您需要重写django模型的save方法,并提供您上面所述的自定义逻辑。
class Item(models.Model):
id = models.CharField(max_length=14, primary_key=True)
otherId = models.CharField(max_length=2084, blank=True)
def save(self, *args, **kwargs):
# handle you logic here
# check if self.id is empty string and do something about it
super(Item, self).save(*args, **kwargs)
对于每个模型django也会自动为主键创建一个字段ID,该ID会自动生成并递增。
答案 2 :(得分:0)
要禁用提交空白字段,必须将null和blank属性设置为False。检查代码。 还要注意,id字段是在django中自动添加的,因此您无需提及。
class Item(models.Model):
otherId = models.CharField(max_length=2084, blank=False, null=False)