Django中我的场景中的Shared_by_me查询?

时间:2013-01-23 06:44:44

标签: django model

我有两个这样的模型:

class File(models.Model):
    users = models.ForeignKey(User)
    file_name = models.CharField(max_length=100)
    type = models.CharField(max_length=10)
    source = models.CharField(max_length=100)
    start_date = models.TextField()
    end_date = models.TextField()
    duration = models.TextField()
    size_overview = models.IntegerField()
    size = models.TextField()
    flag = models.TextField()
    #delete_date = models.CharField(max_length=100, null=True, blank=True)

class Share(models.Model):
    users = models.ForeignKey(User)
    files = models.ForeignKey(File)
    shared_user_id = models.IntegerField()
    shared_date = models.TextField()

我将登录用户的用户ID称为:log_id = request.user.id

我想检索当前登录用户共享的文件。

首先我在Share模型中查询:

Share.objects.filter(users_id=log_id)

users_id属性包含共享文件的用户的ID。现在我知道log_id用户共享的files_id了。如何检索文件信息。我想展示file_name, size and source. 我怎么能这样做?

3 个答案:

答案 0 :(得分:0)

您可以遍历反向关系:

File.objects.filter(shares__users__id = log_id)

BTW:File对象中的users字段怎么样?它如何与Share对象中的users字段相关?

答案 1 :(得分:0)

如果您的查询集假设有多个具有相同用户的Share实例:

shares = Share.objects.filter(users_id=log_id)

您可以遍历它并访问每个实例的文件:

for share in shares:
    print share.files.file_name
    print share.files.type
    print share.files.source

答案 2 :(得分:0)

试试这个......

File.objects.filter(id__in= Share.objects.filter(shared_user_id = log_id).values_list('files', flat=True))