【问题标题】:How To make fields of different model unique in django如何使不同模型的字段在 django 中独一无二
【发布时间】:2021-03-02 17:34:03
【问题描述】:

我在 3 个不同的模型中有一个 url 字段在 rest 框架或 django 中是否有任何预定义的方式,以便它们在多个模型中是唯一的?或者我必须手动编写整个独特的逻辑?并且这些字段/模型不通过外键、多对多或单对不以任何方式相互关联。它们是不同的模型,其中字段名称相同。

class City(models.Model):
    url = models.CharField() # Eg abc.com/indore
class State(models.Model):
    url = models.CharField() # Eg abc.com/madhya-pradesh
class Country(models.Model):
    url = models.CharField() # Eg abc.com/india

例如:在 City 对象中使用的 url 也不应该在任何 State 和 Country 对象中使用

【问题讨论】:

标签: python-3.x django django-rest-framework


【解决方案1】:

一种选择是覆盖所有模型的 clean() 方法。

from django.core.exceptions import  ValidationError

class City(models.Model):
    url = models.CharField(unique=True) # Eg abc.com/indore

    def clean(self):
        if self.url:
            if State.objects.filter(url=self.url).exist():
                raise ValidationError({'url': ['Url already in use for a state']},
                                      code='invalid')
            elif Country.objects.filter(url=self.url).exist():
                raise ValidationError({'url': ['Url already in use for a country']},
                                      code='invalid')
        super().clean()

对州和国家也做类似的事情

【讨论】:

  • 谢谢,我用这个代替手动在序列化程序中编写所有内容。我在这方面还很新,所以我认为一定有类似 unique_together 的东西。
猜你喜欢
  • 2018-08-30
  • 2014-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-30
  • 1970-01-01
  • 2023-02-24
  • 2018-09-23
相关资源
最近更新 更多