访问从许多date_subscribed许多领域在for循环模板Django的

问题描述:

我有这些模型,访问从许多date_subscribed许多领域在for循环模板Django的

class Place(models.Model): 
    name = models.CharField(max_length=200) 
    user = models.ForeignKey(User, on_delete=models.CASCADE, 
    related_name='places', default=1) 
    subscribers = models.ManyToManyField(AppUser, through='PlaceSubscriber') 
    def __str__(self):    # __unicode__ on Python 
     return self.name 

class PlaceSubscriber(models.Model): 
    place = models.ForeignKey(Place, on_delete=models.CASCADE) 
    user = models.ForeignKey(AppUser, on_delete=models.CASCADE) 
    date_subscribed = models.DateTimeField(editable=False, default=timezone.now) 

    class Meta: 
     unique_together = ('place', 'user') 

我要访问的date_subscribed领域的for循环我的模板内

{% for o in place.subscribers.all %} 
    <a href="#" class="list-group-item clearfix"> 
    <span class="pull-left"> 
     {{ forloop.counter }}. &emsp; 
    </span> 
    <span class="pull-left"> 
     <strong>{{ o.full_name }}</strong> 
     <p>Email: <i>{{ o.email }}</i> | Date Subscribed: <i> {{ 
      o.place__placesubscriber__date_subscribed }} </i> </p> 
    </span> 
    <span class="pull-right"> 
    <span class="btn btn-xs btn-primary" 
     onclick="sendPushNotificationToUser('{{ o.ionic_id }}'); return 
     false;">Send Message</span> 
    <span class="btn btn-xs btn-danger" onclick="deletePlaceUser({{ place.id 
     }}, {{ o.id }}); return false; "> 
     Unsubscribe 
    </span> 

    </button> 
    </span> 
    </a> 
{% endfor %} 

我可以像这样访问这个foorloop之外的date_subscribed域:

{% for each in place.placesubscriber_set.all %} 
    {{ each.date_subscribed }} 
{% endfor %} 

但是没有弄清楚它访问另一个内部。

UPDATE

这是我的看法

class PlaceDetailView(DetailView): 
    model = Place 
    template_name = 'place/place_detail.html' 

这就是URL模式

url(r'^place/(?P<pk>\d+)$', views.PlaceDetailView.as_view(), name='detail_place'), 
+0

你是什么意思通过访问for循环内的数据?你可以把这个循环放在另一个里面,并且可以!但是您可能需要在每个步骤中输出一个特定的date_subscribed,对吧?在这种情况下,我会重新编码从您的视图传递的数据,以便使用列表将相应的数据放到循环的步骤中。 – Tico

+0

@Tico是的我想显示每个订阅者的具体位置的每个订阅日期,我正在创建我的视图,像这样'url(r'^ place /(?P \ d +)$',views.PlaceDetailView。as_view(),name ='detail_place')“',所以我还没有发送任何数据,我是否必须手动创建Detail视图? –

我通常会尝试在我的模板中处理简单的数据结构,避免复杂的逻辑。

我将取代视图一个简单的,让你想要的(希望)查询:

def place_detail(request): 

    data = PlaceSubscriber.objects.all().values(
     'user__full_name', 
     'user__email', 
     'place__name', 
     'date_subscribed' 
    ) 

    return render(request,'place.html',{'data':data}) 

这将生成与查询关键词词典列表。

{% for el in data %} 
    {el.user__full_name} 
    {el.date_subscribed} 
    ... 
{% endfor %} 

好了,我不知道,如果是你想要的,但你可以改变查询的值以得到你想要的东西:您现在可以通过显示此数据。

希望它有帮助。

我想在你的views.py文件,你应该这样做:

from django.shortcuts import render 
from .models import Place 
def placeview(request): 
    place = Place() 
    return render(request, 'place.html', {'place':place}) 

我结束了以下@Tico方法,我更新了我的看法,因此有较少的逻辑比以前,这是我更新:

更新我的urls.py文件,使用通用的详细信息视图类

url(r'^place/(?P<place_id>\d+)$', views.place_detail, name='detail_place'), 
停止

更新于views.py文件的详细视图方法返回我从两个模型需要的数据:

def place_detail(request, place_id): 
    place = get_object_or_404(Place, pk=place_id) 
    placeSubscribers = PlaceSubscriber.objects.all().filter(place=place).values(
     'user__full_name', 
     'user__email', 
     'user__ionic_id', 
     'place__name', 
     'date_subscribed', 
     'pk' 
    ) 
    return render(request, 'place/place_detail.html', {'place': place, 'placeSubscribers': placeSubscribers}) 

安达终于更新了我的模板,从placeSu提取数据用户,那里我可以访问date_subscribed字段

{% for placeSubscriber in placeSubscribers %} 
     <a href="#" class="list-group-item clearfix"> 
     <span class="pull-left"> 
      {{ forloop.counter }}. &emsp; 
     </span> 
     <span class="pull-left"> 
     <strong>{{ placeSubscriber.user__full_name }}</strong> 
     <p>Email: <i>{{ placeSubscriber.user__email }}</i> | Date Subscribed: <i> {{ placeSubscriber.date_subscribed }} </i> </p> 
     </span> 
     <span class="pull-right"> 
      <span class="btn btn-xs btn-primary" onclick="sendPushNotificationToUser('{{ placeSubscriber.user__ionic_id }}'); return false;">Send Message</span> 
     <span class="btn btn-xs btn-danger" onclick="deletePlaceUser({{ place.id }}, {{ placeSubscriber.pk }}); return false; "> 
      Unsubscribe 
      </span> 
      </button> 
     </span> 
     </a> 
{% endfor %}