Django get_或_create,如何说commit=Fals

2024-05-17 03:42:43 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有这个模型:

class SocialGroupMembers(models.Model):
    social_group = models.ForeignKey(SocialGroup, related_name="members")
    profile = models.ForeignKey(Profile)
    date_joined = models.DateTimeField(auto_now_add=True)
    added_by = models.ForeignKey(User)
    approved = models.BooleanField(default=False)

如果我这样做了:

obj, created = SocialGroupMembers.objects.get_or_create(
        social_group=social_group, profile=profile)
    # this will give integrity error that added_by can not be null

我不想在筛选条件中包含added_by字段。我想稍后保存added_by字段。类似于commit=False告诉Django我计划稍后添加更多字段:

obj, created = SocialGroupMembers.objects.get_or_create(commit=False,
        social_group=social_group, profile=profile)
if created:
    obj.added_by = request.user
    obj.save()
else:
    #do something

我知道有其他的选择,例如我可以使用ObjectDoesNotExist。但是有没有办法在get_or_create中实现所需的功能?

我想排除added_by字段的原因可能是另一个用户已经添加了另一个用户配置文件。


Tags: orfalseobjaddedgetbyobjectsmodels
1条回答
网友
1楼 · 发布于 2024-05-17 03:42:43

有一个defaults参数可以传递给get_or_create来为新创建的对象填充此数据,这些对象不在筛选中使用:

defaults = {'added_by': request.user}
obj, created = SocialGroupMembers.objects.get_or_create(
        social_group=social_group, profile=profile, defaults=defaults)

https://docs.djangoproject.com/en/1.4/ref/models/querysets/#get-or-create

相关问题 更多 >