你好,我想在“ 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
答案 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
。