Giả sử tôi có mô hình này:Django get_or_create, làm thế nào để nói cam kết = 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)
Nếu tôi làm:
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
Tôi không muốn bao gồm added_by
trường trong tiêu chí lọc. Tôi muốn lưu lại trường added_by
sau. Một cái gì đó như commit=False
để nói với Django rằng tôi có kế hoạch thêm nhiều trường hơn sau:
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
Tôi biết có các lựa chọn thay thế, ví dụ: Tôi có thể sử dụng ObjectDoesNotExist
. Nhưng có cách nào để đạt được chức năng mong muốn trong get_or_create
không?
Lý do tôi muốn loại trừ trường added_by
là do có thể người dùng khác đã thêm một hồ sơ người dùng khác.
Thêm cam kết = False để get_or_create là một tốt ý kiến. Có lẽ bạn có thể thích đề xuất trên danh sách gửi thư django-developers. – s29