2012-04-23 2 views

답변

10

어제이 질문에 대한 답변을 찾고 있었고 문제 해결에 충분했지만 필요에 따라 확장 할 수있었습니다.

당신이 레스토랑과 장소 장고 모델이 가정에만이 같은 "가짜"레스토랑 모델을 만드는 장소의 표 안에 행을 건드리지 않고 레스토랑을 삭제하는 방법 :

class FakeRestaurant(models.Model): 
    place_ptr = models.PositiveIntegerField(db_column="place_ptr_id", primary_key=True) 
    serves_hot_dogs = models.BooleanField() 
    serves_pizza = models.BooleanField() 

    class Meta: 
     app_label = Restaurant._meta.app_label 
     db_table = Restaurant._meta.db_table 
     managed = False 

자,

place = Place.objects.get(pk=1) 
restaurant = Restaurant.objects.get(pk=1) 
fake_restaurant = FakeRestaurant.objects.get(pk=1) 
fake_restaurant.delete() 

fake_restaurant 레스토랑이 자리는 그대로 유지됩니다, 더 이상 존재하지 않습니다이 더 경계 외부 관계가없는 것처럼 해당 테이블에서 객체를 검색 할 수 있습니다.

건배, 다비드

1.9 매개 변수 keep_parentsdelete() 기능을 모델링 할 수 있도록 부모를 유지하기 위해 추가 된 장고에서
+0

Meta 클래스의 "managed"옵션이 True로 설정되어 있습니다. –

+2

악의적 인 천재입니다 !!! – leech

+0

False로 설정합니다. 편집자는 올바른 들여 쓰기를 유지하지 않았습니다. 감사 : D –

2

은 전화 :

restaurant.delete(keep_parents=True) 

문서 : https://docs.djangoproject.com/en/1.10/ref/models/instances/#django.db.models.Model.delete

UPDATE :

A 이 기능은 이 아니고 장고 1.9에서 올바르게 작동하는이 아니므로 의견을 참조하십시오.

+1

방금 ​​시도한 결과 1.9 구현에 버그가있는 것으로 보입니다. 상위 오브젝트에 대한 모든 관계는 제거됩니다. 이 문제는 이후 버전의 https://code.djangoproject.com/ticket/27407에서 수정되었습니다. – byoungb

관련 문제