错误:“ Processus”对象没有属性“ outil_set”-django

时间:2020-09-07 19:53:19

标签: django django-queryset

你好,我想在“ Processus”中显示“ outils” 所以在我看来,我做了这样的事情:

def processus(request, pk_test):

   processus = Processus.objects.get(id=pk_test)

   outils = processus.outil_set.all()

   total_outils = outils.count()

   context={
       'processus':processus,
       'outils':outils,

       'total_outils':total_outils,
 }

但是它不起作用,它显示错误的“ Processus”对象没有属性“ outil_set”

这是我的模特。py

    class outil(ressource):
        nom_outil = models.CharField(max_length=250)
        proprieté = models.CharField(max_length=250)
        technique_id = models.ForeignKey(technique, on_delete = models.CASCADE)

        def __str__(self):
            return self.nom_outil

    class Processus(models.Model):
        nom = models.CharField(max_length=250)
        proprieté = models.CharField(max_length=250)
        outils = models.ManyToManyField(outil)

        def __str__(self):
            return self.nom

1 个答案:

答案 0 :(得分:1)

该关系的名称为outils,因此您可以使用processus.outils.all()进行访问:

def processus(request, pk_test):
    processus = Processus.objects.get(id=pk_test)
    outils = processus.outils.all()
    total_outils = outils.count()
    context={
        'processus':processus,
        'outils': outils,
        'total_outils':total_outils,
    }
    # …

注意:通常最好使用get_object_or_404(…) [Django-doc], 然后直接使用.get(…) [Django-doc]。如果对象不存在, 例如,由于用户自己更改了网址,因此get_object_or_404(…)将导致返回 HTTP 404 Not Found 响应,而使用 .get(…)将导致 HTTP 500服务器错误


注意:Django中的模型是用 PerlCase 而不是 snake_case 编写的, 因此您可能希望将模型从 outil 重命名为Outil

相关问题