2015-05-26 51 views
0

我有一堆我希望分配给不同任务框的消息记录。如何将一个模型对象映射到视图中的另一个模型对象

#models.py 

class TaskBox(models.Model): 
    name = models.CharField(max_length=64, blank=False) 

    def __str__(self): 
     return u'%s' % (self.name) 

    class Admin: 
     pass 

class InboxEntry(models.Model): 
    job_number = models.CharField(max_length=14, unique=False, blank=False, null=False) 
    job_name = models.CharField(max_length=64, unique=False, blank=False, null=False) 
    request = models.CharField(max_length=64, choices=PRINT_CHOICES, blank=True, null=True) 
    date_due = models.DateTimeField(("Due"),auto_now=False) 
    note = models.TextField(max_length=1000, unique=False, blank=True, null=True) 
    assigned_by = models.ForeignKey(UserProfile, blank=False, null=False) 
    box = models.ForeignKey(TaskBox) 
    assigned_to = models.ManyToManyField(UserProfile, related_name='name', blank=True) 
    status = models.CharField(max_length=30, choices=STATUS_CHOICES, default="Awaiting Action") 

    def __str__(self): 
     return u'%s %s' % (self.job_number, self.job_name) 

    class Admin: 
     pass 

    class Meta: 
     ordering = ['status'] 

的想法是为模板有一些通用的标签,如{{在taskboxes taskbox}}创建每个taskbox,将举行一个表,这个盒子的记录单独的股利。我的问题是构建视图功能...

#views.py 

def display_prdInboxEntry(request, id): 
    if request.method == 'POST': 
     form = PrdInboxForm(request.POST) 
     if form.is_valid(): 
      form.save() 
      return HttpResponseRedirect('taskmanager/display/'+ id +'/') 
     else: 
      form = PrdInboxForm(request.POST) 
      return HttpResponseRedirect('taskmanager/display/'+ id +'/') 

    else: 
     form = PrdInboxForm() 
     user = request.user 
     **taskboxes = TaskBox.objects.all() 
     records_1 = InboxEntry.objects.filter(taskboxes[id]=1) 
     records_2 = InboxEntry.objects.filter(taskboxes[id]=2) 
     records_3 = InboxEntry.objects.filter(taskboxes[id]=3) 
     ..... ** 

     return render_to_response('taskmanager/taskmanager_view.html', {'form': form, 'taskboxes': taskboxes, 'records_1' : records_1, 'records_2' : records_2, 'records_3' : records_3, 'user': user}, context_instance=RequestContext(request)) 

的InboxEntry模型有一个叫做“盒子”领域,这只是给TaskBox模型的引用。我需要一种方法来映射说... TaskBox id 1与所有的“box = 1”的InboxEntry对象,以便我可以适当地填充模板。我可以构造函数来适应这种情况,还是我完全用错误的方式去做?

回答

0

这听起来像你正在寻找反向查找的自动生成的属性。你可以得到一个TaskBox这样相关联的所有InboxEntriesQuerySet

TaskBox.objects.filter(id=1).inboxentry_set.all() 

documentation on related objects

+0

返回在模板中不可迭代的TaskBox对象,而不是与特定任务箱相关的条目的查询集。 – kjarsenal

+0

@kjarsenal:我的错误,'inboxentry_set'是'Manager',而不是'QuerySet'。所以你可以过滤它,等等。如果你想全部使用'all()',就可以使用它。 –

相关问题