Home > database >  How to use a value from a query into another query in django
How to use a value from a query into another query in django

Time:01-11

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
  •  Tags:  
  • Related