2012-11-28 39 views
7

假設我有這種模式:Django的get_or_create,怎麼說犯=假

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字段的原因是因爲可能是另一個用戶已經添加了另一個用戶配置文件。

+2

添加提交= False以get_or_create是個不錯的理念。也許你可能喜歡把建議放在django-developers郵件列表上。 – s29

回答