Załóżmy, że mam tego modelu:Django get_or_create, jak powiedzieć popełnić = False
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)
Jeśli zrobić:
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
Nie chcę aby to added_by
pola w kryteriach filtrowania. Chcę później zapisać pole added_by
. Coś jak commit=False
Django powiedzieć, że mam plany, aby dodać więcej pól później:
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
wiem, że istnieją alternatywy np Mogę użyć ObjectDoesNotExist
. Ale czy jest jakiś sposób osiągnięcia pożądanej funkcjonalności w get_or_create
?
Powodem, dla którego chcę wykluczyć pole added_by
, może być to, że inny użytkownik dodał już inny profil użytkownika.
Dodajesz commit = False get_or_create jest dobry pomysł. Być może zechcesz przenieść tę sugestię na listę dyskusyjną django-developerów. – s29