외래 키가있는 테이블이 있습니다. (나는 의도적으로 일대일이 아닌 외래 키를 사용한다.)
이 나는 주문 모델이 있습니다django - 하나의 관련 개체가 생성되었는지, 경쟁 조건인지 확인하십시오.
class Order:
name = models.CharField(max_length=50)
user = models.ForeignKey(User)
active = models.BooleanField(default=True)
# more fields..
을 그리고이 모델의 만 하나의 인스턴스는 사용자 당 존재하는 것을 나는 원한다.
저장하는 간단한 양식 (및보기)이 있습니다. 그리고이 코드가 있습니다
try:
instance = Order.objects.get(user=user)
except Order.DoesNotExist:
instance = None
form = OrderForm(instance=instance)
을하지만 눈치가 동시에 클라이언트 불이 결과의 요청은 (두 개의 인스턴스 내 다음과 같은 검증에도 불구하고, 생성 된 얻을 수 있습니다 (나는 아약스를 사용할 때 것으로 나타났습니다) 경우 기존의 것을 갱신한다고 가정).
다른 코드가 사용자 당이 모델의 인스턴스를 하나만 예상하므로 매우 중요합니다. 어떻게 그것을 장고에서 시행 할 수 있습니까? 내 시야에서 다음을 시도했습니다.
@method_decorator(transaction.atomic, name='dispatch')
하지만 작동하지 않았습니다. 그리고 내가 말했듯이, 나는 일대일 필드를 사용할 수 없다.
Django REST Framework를 사용합니까? 난 serializer 유효성 검사와 함께 이것을 달성 할 수있을 것 같아요. – fodma1
불행히도 당신이 한 - OneToOneField를 사용하는 경우 – user3599803
을 사용하지 말고, Order.objects.get_or_create()를 사용하여 100 % 당신이 lock ('select_for_update()') https://docs.djangoproject.com/ko/1.9/ref/models/querysets/#select-for-update] – Jerzyk