I have the following code in my view:
# default group view for group admins
def adminGroupView(request):
# get group id => group data and messages
group_id = GroupUser.objects.get(username_id=request.user.id)
groupdata = Group.objects.get(group_id=group_id)
groupmessages = MessageBoard.objects.filter(group_id=group_id)
groupmembers = GroupUser.objects.filter(group_id=group_id)
form = SendMessageForm()
context = {
"groupdata":groupdata,
"groupmessages":groupmessages,
"groupmembers":groupmembers,
"form":form
}
return render(request, 'base/group-admin.html', context)
I keep getting a typeerror
TypeError at /group/ Field 'group_id' expected a number but got <GroupUser: 9>.
when i replace the group_id with a number, the code works just fine. How do i use the value from the other query.
model
class Group(models.Model):
group_id = models.AutoField(primary_key=True)
group_name = models.CharField(max_length=30)
date_created = models.DateField(auto_now_add=True)
created_by = models.CharField(max_length=30)
updated = models.DateField(auto_now=True)
def __str__(self):
return str(self.group_id)
class GroupUser(models.Model):
group_id = models.ForeignKey('Group', on_delete=models.CASCADE)
username = models.ForeignKey(User, on_delete=models.CASCADE)
date_joined = models.DateTimeField(auto_now_add=True)
def __str__(self):
return str(self.group_id)
CodePudding user response:
The model.get() can only return 1 object, it is safe to access the attribute it right there. When 0 or more than 1 objects are found, this method will error. See here
Since your field group_id is a reference (foreign key) to Group, you can just get the group by calling:
group = GroupUser.objects.get(username_id=request.user.id).group_id
In the above query, you fetch the related object of the type Group. To get the group_id specifically, you can do this:
group_id = GroupUser.objects.get(username_id=request.user.id).group_id.group_id
