【问题标题】:Shared_by_me query in my scenario in Django?Shared_by_me 在我的 Django 场景中的查询?
【发布时间】:2013-01-23 06:44:43
【问题描述】:

我有两个这样的模型:

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. 我该怎么做?

【问题讨论】:

  • 我不完全理解,但如果你的意思是访问文件属性,你可以看看这个:docs.djangoproject.com/en/dev/ref/files/file。当你有一个共享实例时,你可以使用:share_instance.files.size
  • 我的意思是访问我的文件模型的属性。

标签: django model


【解决方案1】:

可以遍历逆关系:

File.objects.filter(shares__users__id = log_id)

顺便说一句:File 对象中的 users 字段呢?它与 Share 对象中的 users 字段有什么关系?

【讨论】:

  • Share 模型中的 files 字段与 File 相关。用户对象来自内置 django 用户模型。
  • 股份从何而来?我收到此错误:无法将关键字“共享”解析为字段
  • 尝试使用共享而不是共享
【解决方案2】:

如果您的查询集假设同一用户有多个共享实例:

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

【讨论】:

    【解决方案3】:

    试试这个...

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

    【讨论】:

    • 'long' 对象不可迭代
    • 编辑了答案。请确保您将过滤器放置在正确的字段中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-22
    • 1970-01-01
    • 1970-01-01
    • 2017-06-25
    相关资源
    最近更新 更多