11

このモデルがあるとします:

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は、別のユーザーが別のユーザー プロファイルを既に追加している可能性があるためです。

4

1 に答える 1

14

フィルタリングで使用されない、新しく作成されたオブジェクトにこのデータを入力するために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

于 2012-11-28T18:14:54.870 に答える