Python Django创建两个对象,如果Don';不存在
我有一个django应用程序,我需要在一个视图函数中获取两个对象:Python Django创建两个对象,如果Don';不存在,python,django,django-models,django-views,Python,Django,Django Models,Django Views,我有一个django应用程序,我需要在一个视图函数中获取两个对象:token和plan,如果它们不存在,则创建它们,这里是我当前使用的代码: def get_or_create_token_and_plan(user): try: token = Token.objects.get(user=user) except ObjectDoesNotExist as e: token = Token.objects.create(user=user) try: pl
token
和plan
,如果它们不存在,则创建它们,这里是我当前使用的代码:
def get_or_create_token_and_plan(user):
try:
token = Token.objects.get(user=user)
except ObjectDoesNotExist as e:
token = Token.objects.create(user=user)
try:
plan = Plan.objects.get(user=user)
except ObjectDoesNotExist as e:
plan = Plan.objects.create(user=user)
return token, plan
def profile(request):
user = User.objects.get(username=request.user)
token, plan = get_or_create_token_and_plan(user)
context = {'token':token, 'plan':plan}
return render(request, 'profile.html', context)
我正试图找出一种改进get\u或\u create\u token\u和
函数的方法,因为我知道token
和plan
对象在理论上最初是同时创建的。除了异常,如果我将两个try都合并到一个结构中,就会工作,如下所示:
def get_or_create_token_and_plan(user):
try:
token = Token.objects.get(user=user)
plan = Plan.objects.create(user=user)
except ObjectDoesNotExist as e:
token = Token.objects.create(user=user)
plan = Plan.objects.get(user=user)
return token, plan
这方面的主要问题是,如果token
已经存在,而plan
没有,那么在为同一用户再次创建时,我将得到一个IntegrityError,但正如所说的,理论上这不会发生,因为token
和plan
都将仅在该函数中创建,所以我的问题是,在这种情况下,我应该更改get\u或\u create\u token\u和\u plan
,还是应该使用我后面提到的示例。Django提供了一个可能对您有用的函数。所以我想你能做到
def get_or_create_token_and_plan(user):
token, _ = Token.objects.get_or_create(user=user)
plan, _ = Plan.objects.get_or_create(user=user)
return token, plan
您的初始函数没有问题,但您可以使用我一直在寻找的函数!顺便说一句,get\u或\u create
返回一个元组,对吗?。就像是token,boolean=token.objects.get\u或\u create(user=user)
只获取对象一样。你说得对,对不起。我会更新答案。