我有一些模型:
class Comments(models.Model):
user = models.ForeignKey(User, related_name='user_comment', on_delete=models.CASCADE)
heading = models.CharField(max_length=100)
score = models.IntegerField(default = 1, validators=[MinValueValidator(1), MaxValueValidator(5)])
text = models.CharField(max_length=1000)
created_at = models.DateTimeField(auto_now_add=True)
class Meta:
ordering = ['-created_at',]
def __str__(self):
return self.heading
和i在shell中发出。get请求:
Comments.objects.get(pk=1).user
我:
<User: user9>
但是当我提出这个请求时:
Comments.objects.filter(pk=1).values('user')
我:
<QuerySet [{'user': 9}]>
由于某些原因,在查询集中我只得到id,而没有得到username。由于我的应用程序的特殊性,我需要精确地使用.filter或.all(),因此我必须以某种方式在查询集中获得用户名。请帮帮我。
如果您想从QuerySet中获取所有用户名:
usernames = Comments.objects.filter(pk=1).values_list('username', flat=True)
如果你想从QuerySet中获得第一个用户名:
comment_qs = Comments.objects.filter(pk=1).values_list('username', flat=True)
username = comment_qs.first() if comment_qs.exists() else 'Unknown'
或
try:
comment = Comments.objects.get(pk=1)
except Comments.DoesNotExist:
username = 'Unknown'
else:
username = comment.username
您可以使用索引来获取对象。
print(Comments.objects.filter(pk=1)[0].username)
你得到了这个id,因为Django把这个关系写为与另一个对象相关的对象的id。例如,在数据库中的表Comment中,列user
保留了表User
的行ID。
要实际获得用户名,您只需执行以下操作即可Comments.objects.filter(pk=1).values('user__username')