Reputation: 756
I have a simple question I guess:
I am trying to query my data base in order to retrieve the number of team members linked to a specific team, linked to a specific project.
team_member_count = Project.objects.get(id = id).team_id.members.count()
The query is for the project detail view using a url like : localhost/website/project/141/
In the shell my query is Project.objects.get(id = 141).team_id.members.count()
but in the views I get :
TypeError: int() argument must be a string, a bytes-like object or a number, not 'builtin_function_or_method'
My view is the following (retrieving data for 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)
Models :
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 patterns:
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'),
]
Upvotes: 0
Views: 42
Reputation: 599540
You don't have a local variable called id
in your get
method; Python is assuming you're referring to the global built-in id()
function, hence the error.
According to your URLs, you are capturing a keyword argument called pk
. So you should get that from the kwargs
dict:
Project.objects.get(id=kwargs['pk'])...
Upvotes: 2