Django 1.4中的原子数据库操作

Django 1.4中的原子数据库操作,django,django-models,atomic,django-postgresql,Django,Django Models,Atomic,Django Postgresql,这个问题与Django 1.4类似。我想知道是否有一种方法可以做到这一点,而不必求助于“原始SQL”。我的设置与他的稍有不同,所以我会解释 我有一个用户记录和一个名为UserRecords的通用表。下面是UserRecord的定义 如您所见,这是一个非常通用的k/v存储表,具有可选的父属性,可用于将记录分组在一起并优化某些搜索。在本例中,当我们要为用户添加几个别名时,它非常有用 # Inside the User model def add_alias (self, name): try

这个问题与Django 1.4类似。我想知道是否有一种方法可以做到这一点,而不必求助于“原始SQL”。我的设置与他的稍有不同,所以我会解释

我有一个用户记录和一个名为UserRecords的通用表。下面是UserRecord的定义

如您所见,这是一个非常通用的k/v存储表,具有可选的父属性,可用于将记录分组在一起并优化某些搜索。在本例中,当我们要为用户添加几个别名时,它非常有用

# Inside the User model
def add_alias (self, name):
    try:
        UserRecord.objects.get(user=self, parent="alias", key=name, value=self.username)
    except UserRecord.DoesNotExist:
        UserRecord(user=self, parent="alias", key=name, value=self.username).save()
这为我们设置了一个竞争条件,如果用户两次输入相同的别名,它可能会创建两个相同的记录。然后每个
UserRecord.objects.get
调用都会失败,因为有两个调用,我收到一封Django错误电子邮件,然后手动修复数据库


我在文档中找不到任何允许我以原子方式创建内容的内容。除了在另一个问题中提到的原始sql之外,还有什么想法吗?

可能使用
unique\u=(“用户”、“键”),
@sneawo打算说不,但让我检查一下that@sneawo啊,明白了。我有一些用作多存储的父/键值。所以parent=“likes”,key=“brands”,value=[品牌名称]。如果
unique_together=((“用户”、“家长”、“键”、“值”),
?@sneawo有点违背目的,因为在我只想要一条记录的情况下,这并不能防止重复
# Inside the User model
def add_alias (self, name):
    try:
        UserRecord.objects.get(user=self, parent="alias", key=name, value=self.username)
    except UserRecord.DoesNotExist:
        UserRecord(user=self, parent="alias", key=name, value=self.username).save()