型号:
firstname: models.CharField(max_length = 30)
lastname: models.CharField(max_length = 30)
group: models.IntegerField(max_length = 5)
我喜欢独特的概念,但我该如何使用它? 我想要做的是将unique_together应用于firstname和group# 稍后我将随机分配组号并且不希望在同一组中有两个名字,因此如果它打破了唯一的统一规则,它会尝试下一个组号。我该如何申请?
答案 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将此任务分配给某个异步任务,并为您创建用户名,而不是让您的用户等待您返回给她。