'ManyToManyDescriptor'对象没有属性'filter'



我正在制作一个应用程序,该应用程序获取数据,然后通过图形显示数据,问题是我正在进行查询,以了解开发人员何时属于某个项目,但这给我带来了一个错误,我不同意ManyToManyDescriptor对象没有filter属性。

我的观点:

class ProjectTemplateView(TemplateView):
template_name = 'index.html'
def count_developer(self):
projects = Project.objects.all()
for project in projects:
developers = Developer.project_set.filter(project=project).count()
print(developers)

def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['projects'] = Project.objects.all()
context['developers'] = self.count_developer()
return context

这是我的项目模型:

class Project(models.Model):
STATUS_CHOICES = (
('approver', 'Aprovado'),
('process', 'En Proceso'),
('inactive', 'Inactivo'),
)
name = models.CharField(max_length=50, unique=True, verbose_name='Nombre')
developer = models.ManyToManyField(Developer, verbose_name='Desarrollador')
visibility = models.BooleanField(default=False, verbose_name='Visibilidad')
status = models.CharField(
max_length=10, choices=STATUS_CHOICES, verbose_name='Estatus')
slug = models.SlugField(max_length=50, unique=True)
created_at = models.DateTimeField(
auto_now_add=True, verbose_name='Fecha de Creacion')
update_at = models.DateTimeField(
auto_now=True, verbose_name='Fecha de Actualizacion')

这是我的开发者模型:

class Developer(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
created_at = models.DateTimeField(auto_now_add=True, verbose_name='Fecha de Creacion')

这可能很有用。

def count_developer(self):
projects = Project.objects.all()
for project in projects:
developers = project.developer.all()
# give you whole queryset
print(developers)
# will give you count
print(developers.count())

另一件事是,您应该从count_developer函数返回开发人员,这样您就可以在模板中获得开发人员计数。

最新更新