python - Django:检查对象是否存在但不是对象的当前实例

标签 python django django-validation

我已经为一个项目构建了一个基本的 CMS 系统,并且正在添加一个订单系统,以便您可以在导航栏中对创建的页面进行排序。不幸的是,我编写的自定义验证器有点过于激进,当您编辑页面时会引发错误,因为正确地说,订单已经存在于数据库中。

表单建模基于:

class Page(models.Model):
page_name = models.CharField(max_length=100)
page_content = models.CharField(max_length=16777000)
link = models.URLField(blank=True)
order = models.IntegerField()

自定义验证器:

def clean_order(self):
    data = self.cleaned_data['order']
    pg = Page.objects.filter(order=data)
    if pg.count() > 0:
        raise forms.ValidationError("This order number already exists. Use another.")
    return data

我有什么办法可以在执行更新时让自定义验证器只在新订单已经存在但不是当前 Page 对象的情况下引发错误。像这样的东西:

pg = Page.objects.filter(order=data).filter(pk!=editpagepk)

谢谢!

最佳答案

使用 exclude方法,像这样:

pg = Page.objects.filter(order=data).exclude(pk=self.instance.pk)

关于python - Django:检查对象是否存在但不是对象的当前实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14761528/

相关文章:

python - 将两个字典(价格、股票)的值相乘然后相加

django - 如何比较 Django 中的两个日期时间字段

python - 如何在 django 中停止用户已存在验证?

django - 类型错误 : 'RegexValidator' object is not iterable

django - 如何在 Django 中获取 UploadedFile 的临时名称?

python - 为字典列表中的两个键创建唯一的字典

python - 获取两个字符串参数并返回一个字符串,其中仅包含 python 中两个参数字符串中的字符

python - 我怎样才能在数据框中为 groupby 做 Python

带有查询参数的 Django url 和单个 View 来检索不同的对象集

python - Django:HTML 标签显示为文本