修改unique_together约束以保存新对象并删除旧对象

时间:2017-05-22 20:31:56

标签: django

我有一个在四个字段上具有unique_together约束的模型。但是,我想删除旧对象并将其替换为较旧的对象(或者更新旧的对象?也可以使用),而不是提高正常的验证错误。关于如何做到这一点,我有点不知所措,或者是否有更好的方法来实现这种行为。

编辑:

修改save方法只是检查具有这四个字段的实例的数据库并在找到一个字段时删除它的任何缺点?

1 个答案:

答案 0 :(得分:1)

覆盖save方法是可以的,但每次都会获取数据库,可能会导致性能下降。如果你处理ValidationError,它会更好,更多 pythonic

try:
   YourModel.objects.create(
       unique_together_field_1, 
       unique_together_field_2,
       unique_together_field_3,
       unique_together_field_4,
       ...
   )
except YourModel.ValidationError:
   # update or replace the existing model   

修改

您可以在模特经理中使用此代码:

class YourModelManager(models.Manager):
    def create(**kwargs):
        try:
            super(YourModelManager, self).create(**kwargs)
        except YourModel.ValidationError:
            # handle here the error
            # kwargs is a dictionary with the model fields

并在模型中:

class YourModel(models.Model):
    unique_together_field_1 = ....
    ...
    class Meta:
        unique_together = [...]

    objects = YourModelManager()

检查有关自定义管理员的docs