如何在HTML中关联外键模型

问题描述 投票:0回答:1

我正在编写门户网站来管理任务,我创建了以下所示的模型

以及下面显示的以下视图,在HTML(如下所示)中,我的部分显示了最近30天的最新任务,

[当我循环执行可能具有多个子任务的每个主任务时,我想例如显示与子任务相关的用户和详细信息,我知道如何从主模型类数据中获取数据,但是我不知道如何从外键子模型检索与其主模型关联的数据。

例如,如何显示与主任务相关联的子任务的所有用户

task_assign = models.ForeignKey(User, on_delete=models.CASCADE, related_name="task_assign",default=1)

或任何其他类似的任务,例如与主任务相关的所有子任务描述

task_description = models.CharField(max_length=200)

请咨询

谢谢

视图类

class IndexView(TemplateView):
    template_name = 'index.html'
    def get_context_data(self, **kwargs):
        context = super(IndexView, self).get_context_data(**kwargs)
        #filter active runing tasks
        context['active_tasks'] = MainTask.objects.filter(complete=False).count()
        #All oobjects main Task
        context['maintask'] = MainTask.objects.all()

        #All objects Subtask
        context['childtask'] = MainTask.item_main.all()
        #filter task due date
        #due_range = 
        context['due_task'] = MainTask.objects.filter(due_date__day__lte=7, complete=False).count()
        #task paused
        context['task_paused'] = MainTask.objects.filter(task_status='PA', complete=False).count()

        #task paused
        context['task_completed'] = MainTask.objects.filter(task_status='CO', complete=True).count()

        #task paused
        context['task_started'] = MainTask.objects.filter(task_status='NS', complete=True).count()

        ###query for dashboard
        #recent tasks query
        context['recent_task'] = MainTask.objects.filter(created_at__gte=datetime.now()-timedelta(days=30), complete=False)

        #Current date time
        now = timezone.now()
        context['current_time'] = now


        return context

型号

class MainTask(models.Model):
    task_title = models.CharField(max_length=200)
    global_task_info = models.TextField(max_length=500,default=None) 
    complete = models.BooleanField(default=False)
    overall_precent_complete = models.PositiveIntegerField(default=0)

    created_at = models.DateTimeField(default=datetime.datetime.now())
    updated_at = models.DateTimeField(default=datetime.datetime.now())
    due_date = models.DateTimeField(default=datetime.datetime.now())

    global_task_assign = models.ForeignKey(User, on_delete=models.CASCADE, related_name="global_task_assign",default=1)
    TASK_STATUS_CHOICES = [
    ('ST', 'STARTED'),
    ('NS', 'NOT STARTED'),
    ('IP', 'IN PROGRESS'),
    ('PA', 'PAUSED'),
    ('CO', 'COMPLETED'),
]
    task_status = models.CharField(max_length=2,choices=TASK_STATUS_CHOICES,default='NOT STARTED')

    def __str__(self):
        return self.task_title



class ChildTask(models.Model):
    # Relationship Fields
    item_main = models.ForeignKey('ittasks.MainTask',on_delete=models.CASCADE, related_name="item_main", )
    task_description = models.CharField(max_length=200)
    task_info = models.TextField(blank = True)
    task_complete = models.BooleanField(default=False)
    sub_task = models.CharField(max_length=200)
    task_precent_complete = models.PositiveIntegerField(default=0)
    task_created = models.DateTimeField(default=datetime.datetime.now())
    task_updated_at = models.DateTimeField(default=datetime.datetime.now())
    task_due_date = models.DateTimeField(default=datetime.datetime.now())


    task_assign = models.ForeignKey(User, on_delete=models.CASCADE, related_name="task_assign",default=1)


    def __str__(self):
        return self.task_description

html

{% if recent_task %}


    {% for rtasks in recent_task %}


         <div class="card m-b-0">
             <div class="card-header" id="heading-{{ rtasks.id }}">
               <h5 class="mb-0">
                 <a class="artasks" data-toggle="collapse" data-target="#collapse-{{ rtasks.id }}" aria-expanded="true" aria-controls="collapse-{{ rtasks.id }}">
                     <i class="m-r-5 fas fa-th-list" aria-hidden="true"></i>
                     <span>{{rtasks.task_title}}</span>
                 </a>
               </h5>
             </div>
             <div id="collapse-{{ rtasks.id }}" class="collapse show" aria-labelledby="heading-{{ rtasks.id }}" data-parent="#accordionExample">
               <div class="card-body">

                                 <span class="todo-desc">{{rtasks.task_title}}</span> <span class="badge badge-pill badge-danger float-right">{{ current_time|timeuntil:rtasks.created_at }}</span>

                     <ul class="list-inline">
                             <li class="assignee list-inline-item"><img class="rounded-circle" width="40" src="../../assets/images/users/1.jpg" alt="user" data-toggle="tooltip" data-placement="top" title="" data-original-title="Steave"></li>
                             <li class="assignee list-inline-item"><img class="rounded-circle" width="40" src="../../assets/images/users/2.jpg" alt="user" data-toggle="tooltip" data-placement="top" title="" data-original-title="Jessica"></li>
                             <li class="assignee list-inline-item"><img class="rounded-circle" width="40" src="../../assets/images/users/3.jpg" alt="user" data-toggle="tooltip" data-placement="top" title="" data-original-title="Priyanka"></li>
                             <li class="assignee list-inline-item"><img class="rounded-circle" width="40" src="../../assets/images/users/4.jpg" alt="user" data-toggle="tooltip" data-placement="top" title="" data-original-title="Selina"></li>
                         </ul>
                 Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.
                 <div class="d-flex no-block align-items-center m-t-25">
                         <span>{{rtasks.overall_precent_complete}}% Impressions</span>
                         <div class="ml-auto">
                             <span>{{rtasks.overall_precent_complete}}</span>
                         </div>
                     </div>
                     <div class="progress">
                         <div class="progress-bar progress-bar-striped bg-info" role="progressbar" style="width: 53%" aria-valuenow="50" aria-valuemin="0" aria-valuemax="100"></div>
                     </div>
                <div class="comment-footer mt-3">
                         <span class="text-muted float-right">April 14, 2016</span> 
                         <button type="button" class="btn btn-cyan btn-sm">View</button>
                         <button type="button" class="btn btn-success btn-sm">Publish</button>
                         <button type="button" class="btn btn-danger btn-sm">Delete</button>
                     </div>     
               </div>
             </div>
         </div>
        {% endfor %}    
          {% endif %} 
django python-3.x django-views
1个回答
0
投票

从此开始在视图中:

your_obj = Your_Model_Class.objects.get(id=1)


context = {
"your_obj" : your_obj,
}

然后将对象通过视图的上下文传递到模板。

在模板中:

<p> {{ your_obj.your_model_field }} </p>

然后在外键字段中,可能需要更深一层。

<p> {{ your_obj.your_model_field.your_foreign_key_field }} </p>

我希望有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.