【发布时间】:2012-11-29 02:14:54
【问题描述】:
假设我有这个模型:
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 字段的原因可能是另一个用户已经添加了另一个用户配置文件。
【问题讨论】:
-
将 commit=False 添加到 get_or_create 是个好主意。也许您可能想在 django-developers 邮件列表中提出建议。