检索要在查询中使用的 ID,Django

Retrieving ID to use in a query, Django

我想我有一个简单的问题:

我正在尝试查询我的数据库,以检索链接到特定团队、链接到特定项目的团队成员的数量。

team_member_count = Project.objects.get(id = id).team_id.members.count()

查询是使用 url 的项目详细信息视图,例如:localhost/website/project/141/ 在 shell 中,我的查询是 Project.objects.get(id = 141).team_id.members.count()

但在我的观点中:

TypeError: int() argument must be a string, a bytes-like object or a number, not 'builtin_function_or_method'

我的观点如下(检索 chart.js 的数据)

class ChartData(APIView):

    authentication_classes = []
    permission_classes = []

    def get(self, request, format=None, *args, **kwargs):
        user_count = MyUser.objects.all().count()
        project_count = Project.objects.all().count()
        team_member_count = Project.objects.get(id = id).team_id.members.count()
        labels = ["Users", "Projects", "Team_number", "Green", "Purple", "Orange"]
        default_items = [user_count, project_count,team_member_count,28,12,32]
        data = {
            "labels":labels,
            "default":default_items,
        }
        return Response(data)

型号:

class Team(models.Model):
    team_name = models.CharField(max_length=100, default = '')
    team_hr_admin = models.ForeignKey(MyUser, blank=True, null=True)
    members = models.ManyToManyField(MyUser, related_name="members")

    def __str__(self):
        return self.team_name


class Project(models.Model):
    name = models.CharField(max_length=250)
    team_id = models.ForeignKey(Team, blank=True, null=True)
    project_hr_admin = models.ForeignKey('registration.MyUser', blank=True, null=True)
    candidat_answers = models.ManyToManyField('survey.response')

    def get_absolute_url(self):
        return reverse('website:ProjectDetails', kwargs = {'pk' : self.pk})

    def __str__(self):
        return self.name

URL 模式:

app_name = 'website'
urlpatterns = [
    url(r'^hr_index/$', views.HRIndex.as_view(), name='hr_index'),
    url(r'^candidate_index/$', views.CandidateIndex.as_view(),name='candidate_index'),
    url(r'^employee_index/$', views.EmployeeIndex.as_view(),name='employee_index'),
    url(r'^addproject/$', views.ProjectCreate.as_view(), name='add_project'),
    url(r'^addteam/$', views.TeamCreate.as_view(), name='add_team'),
    url(r'^linkteam/$', views.LinkTeam.as_view(), name='link_team'),
    url(r'^linkteam2/$', views.TeamSelect, name='team_select'),
    url(r'^project/(?P<pk>[0-9]+)/$',views.ProjectDetailView.as_view(), name='ProjectDetails'),
    url(r'^project/(?P<pk>[0-9]+)/api/chart/data/$', views.ChartData.as_view(), name='chartdata'),

]

您的 get 方法中没有名为 id 的局部变量; Python 假设您指的是全局内置 id() 函数,因此出现错误。

根据您的网址,您正在捕获一个名为 pk 的关键字参数。所以你应该从 kwargs 字典中得到:

Project.objects.get(id=kwargs['pk'])...