如何通过查询集获得用户名?



我有一些模型:

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')

相关内容

  • 没有找到相关文章

最新更新