2017-09-22 5 views
0

私は、いとこ関連モデルからデータを取得する方法のドキュメントや例を探すのに苦労しています。だから、テンプレート内の関連するいとこモデルを取得する

モデルは次のようになり場合:

class Part(models.Model): 
    name = models.CharField(max_length=550) 

class Quantity(models.Model): 
    quantity = models.DecimalField(max_digits=10, decimal_places=2)   
    part = models.ForeignKey('Part', related_name='quantity_part') 
    stockarea = models.ForeignKey('StockArea', related_name='quantity_stockarea') 

class Stock(models.Model): 
    name = models.CharField(max_length=550) 

class StockArea(models.Model): 
    area = models.CharField(max_length=550) 
    stock = models.ManyToManyField(Stock, related_name='stockarea_stock') 

    def __str__(self): 
     return self.area 

、ビューに私はこのような部分を取得する:

def details(request, part_id): 
    part = get_object_or_404(Part, pk=part_id) 
    context = { 
     'part': part, 
    } 
    return render(request, 'part/details.html', context) 

は、最後にデータを表示しようとしているテンプレート:

{% for a in part.quantity_part.all %} 
    {{ a.quantity }} pcs 
    Find part in area: {{ a.stockarea }} 
    in stock: {{ part.stockarea.stock.name }} 
{% endfor %} 

私は株式の名前を取得しようとします。私は株式の名前を取得する方法を把握することはできません。私はその部分から道があります。 部分related_nameからの数量quantity_parkとなります。そしてモデルで数量私はモデルとの関係がありますStockArea。そして、そこから私はモデルとの関係を持っています

ガイダンスははるかに高く評価されている=)

は、たぶん私は完全に後方にこれをやっています。たぶん私はモデルを間違って定義するつもりです。私はMySQLに慣れているので、これは私にはとても新しいものです。

+0

を変更株価があなたのstockareaモデルで多対多分野であるので、あなたはそれらの名前を取得するにはstockarea内のすべての株式をループを必要としています。次のようなものがあります: '{a.stockarea.stock.all%}のストックに対する%{{株価}} {%endfor%} ' – anupsabraham

+0

@anupsabrahamあなたは正しいです。それはおそらく私のほんのばかだ。 1つの_area_はもちろん1つの_stock_にのみ関連しています。 – sumpen

+0

次に、そのフィールドをonetooneまたはforeignkeyに変更することをお勧めします。 – anupsabraham

答えて

0

このためのデータモデルは良く行われているように:

from django.db import models 


class Unit(models.Model): 
    name = models.CharField(max_length=32) 
    description = models.TextField() 
    abbrev = models.CharField(max_length=7) 


class Warehouse(models.Model): 
    name = models.CharField(max_length=100) 
    address = models.TextField() 

class StockArea(models.Model): 
    warehouse = models.ForeignKey(Warehouse) 
    # Adjust type of these identifiers as necessary 
    aisle = models.PositiveIntegerField() 
    shelf = models.PositiveIntegerField() 

class Part(models.Model): 
    name = models.CharField(max_length=550) 
    description = models.TextField() 

class Stock(models.Model): 
    part = models.ForeignKey(Part, related_name='stock') # Adds a 'stock' attribute to 'Part' 
    quantity = models.PositiveIntegerField() 
    unit = models.ForeignKey(Unit) 
    location = models.ForeignKey(StockArea) 

ビューコード:

from django.views import generic 
from .models import Part 

class PartView(generic.DetailView): 
    # Pre-fetch related objects. This also illustrates the joins 
    queryset = Part.objects.prefetch_related(
     'stock', 'stock__location', 'stock__location__warehouse' 
    ) 
    template_name = 'yourapp/part/detail.html' 

テンプレートコードyourapp/part/detail.html

{% extends "base.html" %} 
{% block content %} 
    <div class="container-fluid"> 
     <div class="row"> 
      <div class="col-xs-12 col-md-8 col-md-offset-2"> 
       <h1 class="title">{{ part.name }}</h1> 
       <p>{{ part.description }}</p> 
       <h2>Stock information</h2> 
       <div class="container-fluid"> 
        {% for stock in part.stock.all %} 
         <div class="row"> 
          <div class="col-xs-3"> 
           Aisle {{ stock.location.aisle }}, shelf {{ stock.location.shelf }} 
          </div> 
          <div class="col-xs-3 label"> 
           Warehouse: 
          </div> 
          <div class="col-xs-6"> 
           {{ stock.location.warehouse.name }} 
           <address> 
            {{ stock.location.warehouse.address }} 
           </address> 
          </div> 
         </div> 
         <div class="row"> 
          <div class="col-xs-3 label"> 
           Available: 
          </div> 
          <div class="col-xs-8 numeric"> 
           {{ stock.quantity }} 
          </div> 
          <div class="col-xs-1 unit"> 
           {{ stock.unit.abbrev }} <sup><i class="fa fa-icon" title="{{ stock.unit.name }}"></i></sup> 
          </div> 
         </div> 
        {% endfor %} 
       </div> 
      </div> 
     </div> 
    </div> 
{% endblock content %} 

編集

  • 在庫/部品の固定モデル関係。
  • 調整されたデータモデルの仕様に準拠
  • 結合を説明するビューコードが追加され、prefetch_relatedを指します。マッチする
  • 調整テンプレートは
+0

私が注目していたのは、実際にその場所がある場所の倉庫である_StockArea_です。 _Aisle 2、Bin 5_と同様です。しかし私はStock.nameを手に入れたいと思っています。 – sumpen

+0

アイテムは倉庫内の複数の場所に置くことができますか?そうでない場合、その違いはセマンティックであり、単純に在庫にcharフィールドを追加することができます。 – Melvyn

+0

複数の場所に配置することができます。また、このスポットには、例で除外された特性があります。除外されたコードは'です。私は例えばmax_volumeとmax_loadを持っています。だから、各スポットは可能な限り多くの詰め物が得られないか、重量があるので棚のブレーキがかかります。私は' mはSQLに使用されます。 '「JOIN」のようなものがこれで動作しますか? – sumpen

関連する問題