2009-06-25 16 views
0

南を使用してデータの移行を行っていますが、select_relatedを使用して多くのデータを取得します多くのフィールド。djangoの多くのフィールドをselect_relatedするか、.all()を使用して多くのフィールドにアクセスする方法

ドキュメントでは、select_relatedをForeignKeyを使用してリレーションシップのあるフィールドに使用できるように指定しています...私はManyToManyフィールドで正しく動作しないとは思わないでしょうか?

私のフィールドは空白= 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

からのデータを使用して新しいリストオブジェクトを作成するループのために、すべてのRealEstateListingsオブジェクトを取っているとやって

上記のエラーを、以前のRealEstateListingモデルの多対多フィールドのproperty_featuresで返します。

答えて

2

コードをデバッグすることは、使用する方法では失敗しているように思われます。私の推測では、property_featuresを値で置き換えることを望むなら、あなたはobjects.filter(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はdjango.db.models.fields.related.ManyRelatedManagerオブジェクトを返します。このオブジェクトはTrueと評価されます。リストにM2Mフィールドがない場合は、代わりにAttributeErrorを取得します。しかし、これは、あなたが取得しているエラーではありませんが、あなたはにあなたの上記のコードを変更する必要があります。

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

何property_featuresがない場合、オブジェクトにproperty_features変数は空のリストになりますので、これは同じことを行います。

今のところ実際のエラーです。もう一度、あなたがここに書いた何もその誤りを生み出すことはできないと言わなければなりません。前のように、あなたが何かをした場合、そのようなエラーが発生するでしょう

Listing.objects.filter(property_features=x) 

問題の発生場所を特定するのに役立ちます。

+0

こんにちは、上の私の編集を参照して、私は南の偽のormへの参照を削除しました。オブジェクト – Rasiel

+0

ありがとう、これは私が何も間違っているように見えなくなってしまっています。私は後者のコードサンプルをやっていません。私は後でトレースバックを投稿します。 – Rasiel

関連する問題