1
私は自分のアカウント」のページでドライバに属しているルートモデルからのデータをレンダリングしたい

によるフィルタリング。ジャンゴ - そう、彼らはこれまでのデータベースに保存されているleave_from、目的地などのデータを表示する - ユーザー

Models.py:

class Driver(models.Model): 
    user = models.OneToOneField(User, default=1) 
    first_name = models.CharField(max_length=120, blank=True, null=True) 
    last_name = models.CharField(max_length=120, blank=True, null=True) 
    tel = models.CharField(max_length=120, blank=True, null=True) 
    slug = models.SlugField(max_length=120, unique=True) 
    timestamp = models.DateTimeField(auto_now_add=True, auto_now=False) 
    updated = models.DateTimeField(auto_now_add=False, auto_now=True) 

    def __str__(self): 
     return self.user.username 

    def get_absolute_url(self): 
     return reverse("account", kwargs={"slug": self.slug}) 

    def save(self, *args, **kwargs): 
     self.slug = slugify(self.first_name) 
     super(Driver, self).save(*args, **kwargs) 

class Route(models.Model): 
    leave_from = models.CharField(max_length=120, blank=True, null=True) 
    destination = models.CharField(max_length=120, blank=True, null=True) 
    date = models.DateField(auto_now_add=False, auto_now=False) 
    time = models.TimeField(auto_now_add=False, auto_now=False) 
    driver = models.ForeignKey(Driver, on_delete=models.CASCADE) 

    def __str__(self): 
     return self.leave_from 

私は、さまざまなクエリセットで演奏し、下記てきましたが(私は...私はコーディングとDjangoに新たなんだと思います)が取得に最も近いです。

Views.py:それと

def route(request, slug): 
    routedetails = Driver.objects.filter(route=request.user.driver.route_set.all()) 
    context = { 
     "routedetails": routedetails, 
     } 
    return render(request, "route.html", context) 

私はそのドライバーのためのルート内のデータのインスタンスの同じ数を表示するには、ユーザーを取得することができています。

テンプレート:

{% for route in routedetails %} 
     <p>{{ route.user }}</p> 
    {% endfor %} 

私はすべてのさまざまなバリエーションを試してみたが、私はそれが、少なくともルート内のデータは、このユーザーのためにそこにあるユーザーに同じ回数を返して、これは私に最も近いを持っている感じ。この場合、ルートに2つのルートが保存されているので、ユーザー名は2回返されます。私は他のユーザーにテストして、常に一致します。

私はどこにでも見ましたが、これまでのところ私はどんな助けにも感謝しています。

答えて

3

あなたはそれが直接Routeモデルを照会することが最良であるRoute詳細たい場合:

routedetails = Route.objects.filter(driver__user=request.user) 

を次に、あなたのテンプレートにRouteオブジェクトを反復処理することができます

{% for route in routedetails %} 
    <p>{{ route.leave_from }}</p> 
    <p>{{ route.destination }}</p> 
    ... 
{% endfor %} 
+0

本当にありがとうございました!これはうまくいく - 助けに感謝する –

2

ポケット王のソリューションです素晴らしいと受け入れられる必要があります。これは、N + 1個のクエリを避けるために、複数のドライバ(管理ページ?)のルートを表示する場合の例です。これにより、ドライバに関連付けられたすべてのルートがプリフェッチされ、後で不要なSQLクエリを排除できるように、特定のルートを持つ各ドライバに属性ルートが追加されます。

from django.db.models import Prefetch 

drivers = Driver.objects.all() 
queryset = drivers.prefetch_related(Prefetch('route_set', queryset=Route.objects.filter(driver_id__in=drivers), to_attr='routes')) 

ドライバーのルートでログインして取得するためのテンプレート

{% for driver in drivers %} 
    {% for route in driver.routes %} 
     <p>{{ route.leave_from }}</p> 
     <p>{{ route.destination }}</p> 
     ... 
    {% endfor %} 
{% endfor %} 
1

、最も簡単な方法です。

views.py

routes = request.user.driver.route_set.all() 

テンプレート

{% for route in routes %} 
    {{ route.leave_from }} 
    {{ route.destination }} 
{% endfor %} 
関連する問題