2016-07-16 12 views
0

djangoでFKを使用して別のモデルとの関係を設定しようとしていますが、djangoテンプレートでFK関連のモデルフィールドを呼び出すことができません。私が "provider.name"を呼び出すとき、テンプレートでは、結果として "None"が表示されます。私は5種類のサプライヤをリストアップしており、管理者から見ることができます。私はプロバイダを持っていると私は以下のような製品だ:私はそれを呼び出しています方法があるテンプレートでリレーショナルモデルのテンプレート内のDjango QuerySet

class Product(models.Model): 
    title = models.CharField(max_length=500) 
    description = models.TextField(blank=True, null=True) 
    price = models.DecimalField(max_digits=20, decimal_places=2) 
    sku = models.CharField(null=True, max_length=100) 
    url = models.URLField(blank=True) 
    slug = models.SlugField(unique=True) 
    providers = models.ManyToManyField('Provider', blank=True) 

    def __unicode__(self): 
     return self.title 

    class Provider(models.Model): 
    name = models.CharField(max_length=200) 
    description = models.TextField(null=True, blank=True) 
    logo = models.ImageField(upload_to='products/') 
    shipping_method = models.CharField(max_length=250) 
    shipping_time = models.CharField(max_length=250) 
    return_policy = models.CharField(max_length=200) 
    free_delivery = models.CharField(max_length=200) 
    customer_service_number = models.CharField(max_length=200) 
    shipping_charges = models.CharField(max_length=200) 

    def __unicode__(self): 
     return self.name 

を:

{% with provider=object.providers %} 
{{ provider.name }} 
{% endwith %} 

それは"None"を示して結果。私は別のテンプレートでプロバイダーに電話しようとしています。それ自体のList/Detailジェネリックビューではうまく動作します。私は別のアプリテンプレートでそれを呼び出そうとしています。お知らせ下さい。

更新................私はModelManagerか、単に使用していないとして

はヒューという音検索エンジンのための私のsearch.htmlのが

{% for result in page.object_list %} 
      <div class="col-lg-1-5 col-md-3 col-sm-4 col-xs-12"> 
      <div class="pbox"> 
       <div class="photo"> 
       <a href="{{ result.object.get_absolute_url }}"><img src="{{ result.object.get_image_url }}" alt="product"></a> 
       </div> 
       <div class="info"> 
       <div class="url"> 
       name 
        {% for item in result.object.providers.all %} 
         {{ result.provider.name }} 
        {% endfor %} 

       </div> 
       <div class="description"> 
        {{ result.object.description|truncatewords:7 }} 
       </div> 
       <div class="price"> 
        {{ result.object.price|intcomma }} 
       </div> 
       </div> 
      </div> 
      </div> 

を含み

モデルにあらかじめ定義されたデフォルトのマネージャーを使用します。管理者は、このような何のメソッドを持っていないので、それはNoneを返すように、あなたは関連マネージャを呼び出しproviderを呼び出す

def get_provider(self): 
     item = self.providers.all() 
     return item 

答えて

1

Iの場合:私はこのような製品のAppモデルの下でコードの行を追加しました。
あなたが経営者からオブジェクトを取得する場合、あなたはあなたのケースではself.providers.all()
を呼び出す必要があり、テンプレートタグなければならないが、次のようになります。

{% for item in object.providers.all %} 
    {{ provider.name }} 
{% endfor %} 
+0

私はこれを試してみましたが、私はそう "の下で今のいずれかのマネージャーを使用していないとして、 Product "app私は単にself.providers.all()を返したget_providerのための関数を追加しました。テンプレートで質問を更新しています。私はwhooshの検索エンジンコードを実装しているので、そのsearch.htmlにはどのようにコードがリストされているかを見ることができます。 –

関連する問題