具有获取上下文的Django视图不起作用

时间:2018-07-23 02:53:22

标签: python django

有一个简短的问题。试图在一个DetailView中使用关系模型。但是,无论我尝试什么,数据都不会显示。我尝试了几种版本的模板标签,但无济于事。

html

 {% for parts in relatedparts %}{{ parts.name }} 
                                                                </div>{% endfor %}    

views.py

class ErrorCodeView(DetailView):
context_object_name = 'error_code_details'
model = models.ErrorCodes
template_name = 'error_code_details.html'


def get_context_data(self, **kwargs):
    # xxx will be available in the template as the related objects
    context = super(ErrorCodeView, self).get_context_data(**kwargs)
    context['relatedparts'] = RelatedParts.objects.filter(name=self.get_object())
    return context

models.py

class ErrorCodes(models.Model):
name = models.CharField(max_length=256)
description = models.CharField(max_length=400)
instructions = models.CharField(max_length=256)
PartsNeeded = models.CharField(max_length=120, default='')
usercomments = models.CharField(max_length=400, default='', blank=True)
relpic = models.ImageField(upload_to='media/',blank=True)
relpictwo = models.ImageField(upload_to='media/',blank=True)

def __str__(self):
    return self.name

def get_absolute_url(self):
    return reverse("errorcodes:errorcodeview",kwargs={'name':self.name})  

class RelatedParts(models.Model):
name = models.CharField(max_length=256)
related_error_code = models.ForeignKey(ErrorCodes, on_delete=models.PROTECT)

def __str__(self):
    return self.name

2 个答案:

答案 0 :(得分:2)

您根本不需要这样做。您可以按照模板中的关系进行操作。

{% for part in object.relatedparts_set.all %}{{ part.name }}{% endfor %}

您在视图中不需要任何代码即可启用此功能。

答案 1 :(得分:0)

是不是“ name = self.get_object()”应该是“ name = self.get_object()。name”?

您当前拥有:

context['relatedparts'] = RelatedParts.objects.filter(name=self.get_object())

但这可能会产生一个空的查询集。