Django QuerySets return the PK of the associated objects but I need the attribute name. For example Sitting.objects.filter(complete=True).values('user')
would return a QuerySet like: <QuerySet[{'user':2}, {'user':3}]>
. How do I easily convert the 2
to user.get_full_name()
or such?
To give an idea of what I was trying:
tests_taken = Sitting.objects.filter(complete=True).values('user')
for test in tests_taken:
try:
tests_taken[test]['user'] = Employee.objects.get(pk=test['user'])
except TypeError:
pass
print(tests_taken)
It just seems really inefficient and I am not really sure what to do from here.
This:
qs = Sitting.objects.filter(complete=True).values('user')
tests_taken = [{'user': Employee.objects.filter(pk=user).get_full_name()} for user in qs]
print(tests_taken)
Gives this error:
int() argument must be a string, a bytes-like object or a number, not 'dict'
Models:
class Sitting(models.Model):
user = models.ForeignKey(
settings.AUTH_USER_MODEL,
verbose_name=_("User"),
on_delete=models.CASCADE)
class Employee(AbstractUser):
first_name = models.CharField(max_length=64)
last_name = models.CharField(max_length=64)
def get_full_name(self):
# returns self.first_name + self.last_name
My goal:
{'user':2}
should be converted to {'user':'John Doe'}