Django:使模型字段和外键唯一一致

时间:2018-01-24 14:57:30

标签: django validation django-models unique

我有以下型号:

class Locale (models.Model):
    """
    Locale model
    """
    locale_id = models.AutoField(primary_key=True)
    locale_name = models.CharField(max_length=800)
    magister = models.ForeignKey(Magister, on_delete=models.CASCADE)

    def get_name(self):
        return self.locale_name

在数据库中,必须只有一个locale-magister对。

要创建每个区域设置项,管理员必须上载区域设置。这是通过批量上传完成的:

try:
    lcl=Locale(locale_name = data_dict["locale_name"], magister = data_dict["magister "])
    # lcl.full_clean()
    locales_list.append(lcl)
    rows+=1
    if rows==INSERTNUMBER:
        try:         
            Locale.objects.bulk_create(locales_list) 
            locales_uploaded+=rows
        except IntegrityError as e:
            print("Error: locale bulk_create "+repr(e))                            
        locales_list=[]
        rows=0

我在批量上传时尝试使用lcl.full_clean(),但收到UNIQUE constraint failed: zones_locale.locale_name错误,只有大约1/2的所有语言环境成功上传。

我也尝试过使用:

def validate_unique(self, exclude=None):
    lcl = Locale.objects.filter(locale_id=self.locale_id)
    if lcl.filter(magister=self.magister).exists():
        raise ValidationError("item already exists")

但是同样的错误发生了。

我也尝试过使用:

class Meta:
    unique_together = (("locale_name", "magister"),)

这也不起作用。

据我所知,问题是存在属于不同魔法师的同名语言环境。

如何同时上传具有相同名称的区域设置,同时强制执行任何给定区域设置 - 魔术师对的唯一性?

0 个答案:

没有答案