2009-06-25 3 views
0

나는 남쪽을 사용하여 데이터 이전을 작성하고 있지만 ... select_related를 사용하여 많은 것을 검색 할 수 있습니다. 많은 분야.django에서 여러 필드에 걸쳐 select_related 또는 많은 필드에 .all()을 사용하여 많은 필드에 액세스하는 방법

foreignKey ...를 사용하여 관계가있는 필드에 대해 select_related를 사용할 수 있다고 설명서에서 지정합니다. ManyToMany 필드에서 올바르게 작동하지 않을 수도 있습니다.

내 필드에 blank = null이 있지만 문서에서 select_related ('field_name')를 호출 할 수 있다고 말하면 관련 관계를 가져옵니다. 난 ...이 아래의 목록은 검색어 세트에있는 항목입니다

을 할 노력하고있어 때 아직

for listing in RealEstateListing.objects.all(): 
     listing_type_slug_url = slugify(listing.listing_type.name) 
     sub_type = orm.SubType.objects.get(slug_url=listing_type_slug_url) 
     pricing_option = PricingOption.objects.get(name=listing.pricing_option.name) 
     lt = orm.Listing(listing_type=sub_type.parent, 
         sub_type=sub_type, 
         expiration_date=listing.expiration_date, 
         title=listing.title, 
         slug_url = listing.slug_url, 
         description = listing.description, 
         contact_person=listing.contact_person, 
         secondary_contact=listing.secondary_contact, 
         address=listing.address, 
         location=listing.location, 
         price=listing.price, 
         pricing_option=pricing_option, 
         display_picture=listing.display_picture, 
         image_gallery=listing.image_gallery, 
         date_added=listing.date_added, 
         status=listing.status, 
         featured_on_homepage=listing.featured_on_homepage, 
         ) 
     lt.save()  

     lt.features.clear() 
     if listing.property_features: 
      property_features = listing.property_features.all() 
     else: 
      property_features = None 
     if property_features:  
      for ft in property_features: 
       ft_ = Feature.objects.get(name=ft.name) 
       lt.features.add(ft_) 

내가 사용할 수를이 필드 property_features를 해결할 수 있음을 말해 ... 오류가 필드는 id가 &이며 ... 관계를 끌어 내지 못하는 것 같습니다.

다른 많은 질문에 select_related를 사용하여 많은 필드를 액세스 할 수 없다면 다른 질문이 무엇입니까?

---------------------------------------------- --EDIT ----------------------------------------

나는 데이터 마이 그 레이션을 위해 사용했던 가짜 orm을 참조하십시오. 나는 기본적으로 내가 문제가 어디 위의 코드 마지막 부분은 이전 RealEstateListings

의 데이터와 새로운 목록 개체를 만드는 for 루프에서 모든 RealEstateListings 객체를 취하고로 뭘하는지

이전 RealEstateListing 모델의 many to many property_features를 사용하여 위의 오류를 표시합니다.

답변

2

코드를 디버깅하는 것이 불가능하기 때문에 사용하는 방법이 잘못되었습니다. 내 추측은 당신이 object.filter (property_features = ...)를하고 있다는 것입니다. property_features를 값으로 대체하려고합니다. 키워드 인수로 쓰여졌 기 때문에 그렇게 할 수 없습니다.

select_related를 잘못 이해 한 것처럼 보입니다. 이것은 관련 객체에 액세스하는 추가 쿼리를 피하기 위해 순전히 사용됩니다. M2M 필드에 대해서는 확신 할 수 없지만 FK와 동일하지는 않으므로 동일한 반응을 기대하지 마십시오.

편집 :

그래서 RealEstateListing는 M2M라는 한 property_features

우선이 문장은 좋은없는 경우 : 모든 RealEstateListing는이 M2M 항상 isting로 true가됩니다를 가지고 있기 때문에

if listing.property_features: 
    property_features = listing.property_features.all() 
else: 
    property_features = None 
if property_features: 

.property_features는 True로 평가 될 django.db.models.fields.related.ManyRelatedManager 객체를 반환합니다. 목록에 M2M 필드가 없으면 대신 AttributeError가 표시됩니다. 이것은 당신이 그러나, 점점 오류 아니지만, 당신은 당신의 위의 코드를 변경해야합니다 : 더 property_features가없는 경우 때문에 이것은, 동일한 작업을 수행하는 오브젝트에 property_features 변수가 빈리스트가 될 것입니다

property_features = listing.property_features.all() 
if property_features: 

.

실제 오류가 있습니다. 다시 말하지만 여기서 쓰지 않은 것은 그 오류를 만들어 낼 수 있다고 말해야합니다. 이 같은 오류를 얻을 것 전에 같이 당신은 문제가 발생하는 위치를 식별하는 데 도움 것입니다 전체 tradeback 게시

Listing.objects.filter(property_features=x) 

같은 짓을합니다.

+0

안녕하세요, 위의 편집을 참조하십시오, 나는 south의 가짜 orm에 대한 참조를 삭제했습니다. object – Rasiel

+0

고마워요. 아무 것도 잘못되어있는 것처럼 보이지 않으므로 저를 곤란하게합니다. 그리고 후자의 코드 샘플을 작성하지 않을 것입니다. 나중에 추적을 게시 할 것입니다. – Rasiel

관련 문제