假设我有这个模型:
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)
Run Code Online (Sandbox Code Playgroud)
如果我做:
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
Run Code Online (Sandbox Code Playgroud)
我不想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
Run Code Online (Sandbox Code Playgroud)
我知道有其他选择,例如我可以使用ObjectDoesNotExist.但有没有办法实现所需的功能get_or_create?
我想排除该added_by字段的原因是因为可能是另一个用户已经添加了另一个用户配置文件.
Mar*_*vin 12
defaults您可以传递一个参数来get_or_create为新创建的对象填充此数据,这些对象未在过滤中使用:
defaults = {'added_by': request.user}
obj, created = SocialGroupMembers.objects.get_or_create(
social_group=social_group, profile=profile, defaults=defaults)
Run Code Online (Sandbox Code Playgroud)
https://docs.djangoproject.com/en/1.4/ref/models/querysets/#get-or-create
| 归档时间: |
|
| 查看次数: |
5542 次 |
| 最近记录: |