我有以下型号:
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"),)
这也不起作用。
据我所知,问题是存在属于不同魔法师的同名语言环境。
如何同时上传具有相同名称的区域设置,同时强制执行任何给定区域设置 - 魔术师对的唯一性?