如何在django中使用unique_together?

时间:2014-08-06 20:59:19

标签: django django-models

型号:

firstname: models.CharField(max_length = 30)
lastname: models.CharField(max_length = 30)
group: models.IntegerField(max_length = 5)

我喜欢独特的概念,但我该如何使用它? 我想要做的是将unique_together应用于firstname和group# 稍后我将随机分配组号并且不希望在同一组中有两个名字,因此如果它打破了唯一的统一规则,它会尝试下一个组号。我该如何申请?

1 个答案:

答案 0 :(得分:1)

定义约束非常简单。 如果您随机分配组编号,那么棘手的部分就是创建一个用户,但无论您如何扭曲和转动它,您都会进行大量的SQL查询,因为您需要检查用户是否已经存在。

class Person(models.Model):
    firstname = models.CharField(max_length = 30)
    group = models.IntegerField(max_length = 5)

    class Meta:
        unique_together = ("firstname", "group")

然后我猜想一些粗俗的东西(没试过,它非常"马虎")

from random import randint
def assign_group_and_save():
    rand_group = randint(1, 99999)
    person, created = Person.objects.get_or_create(firstname=self.firstname, group=rand_group)
    if not created:
        #try again
        return self.assign_group_and_save()
    else:
        return person

话虽如此,我会尝试使用Celery将此任务分配给某个异步任务,并为您创建用户名,而不是让您的用户等待您返回给她。