如何检索queryset对象中的字段值

Mii*_*ind 2 django

我是django的新手并拥有以下型号:

class MainFile(models.Model):
    owner = models.ForeignKey(User)
    # docfile = models.FileField(verbose_name= 'Enter you file', null=True)
    file_id = models.UUIDField(max_length=38, primary_key=True, default=1)
    file_name = models.CharField(max_length=70)
    file_suffix = models.CharField(max_length=5, blank=True, null=True)
    file_date = models.DateTimeField(auto_now_add=True, null=True)
Run Code Online (Sandbox Code Playgroud)

所以我想使用file_id过滤表的一行,并拥有该行,访问file_suffix.目前我发现了以下方法,但它很棘手:

obj = MainFile.objects.filter(file_id = 'e3e978a3-0375-4bb9-85a2-5175e2ec097d')
suffix = [i.file_suffix for i in obj] 
Run Code Online (Sandbox Code Playgroud)

我试过很多方法但除了上面没有运气但我知道这不是正确的方法.如何使用file_id作为过滤器创建obj后获取file_suffix?

Der*_*wok 7

您可以使用get代替filter

obj = MainFile.objects.get(file_id='e3e978a3-0375-4bb9-85a2-5175e2ec097d')
obj.file_suffix
Run Code Online (Sandbox Code Playgroud)

使用get时,你的查询集将在从数据库中最多1行回来取。在这种情况下,由于file_id被标记为主键,您可以确定它是唯一的。


mis*_*pen 5

您可以简单地将其作为单行执行:

MainFile.objects.values_list('file_suffix', flat=True).get(file_id='e3e978a3-0375-4bb9-85a2-5175e2ec097d')
Run Code Online (Sandbox Code Playgroud)

values_list查询集方法只检索从数据库所需的列数据.然后,该get方法将单个匹配返回到您的过滤器.