Database 如何在Django的两个表中使用Entry.objects.filter()?

Database 如何在Django的两个表中使用Entry.objects.filter()?,database,django,Database,Django,我在Django中有两个表:第一个是file,其中包含文件信息;第二个是share,其中包含共享信息: files\u id是Share表的外键: 现在,我想从文件表中检索共享表中具有文件id的文件信息。我该怎么做 #models.py class File(models.Model): users = models.ForeignKey(User) file_name = models.CharField(max_length=100) type = models.Ch

我在Django中有两个表:第一个是
file
,其中包含文件信息;第二个是
share
,其中包含共享信息:
files\u id
Share
表的外键: 现在,我想从文件表中检索共享表中具有文件id的文件信息。我该怎么做

#models.py
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 = 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的文件信息,并获取共享日期。我的日志id为:
log\u id=request.user.id

我不知道你为什么不发布你的模型

大概你想要的是:

File.objects.exclude(share=None)

我已对您的模型进行了一些更改,以消除
用户
文件
复数名
的混淆。我想你给他们起这个名字是因为你已经有了一些数据库

#models.py
class File(models.Model):
    user = models.ForeignKey(User, db_column="users_id")
    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 = models.TextField()
    flag = models.TextField()
    #delete_date = models.CharField(max_length=100, null=True, blank=True)

class Share(models.Model):
    user = models.ForeignKey(User,db_column="users_id")
    file = models.ForeignKey(File, db_column="files_id")
    shared_user_id = models.IntegerField()
    shared_date = models.TextField()
因此,从以上两个模型来看,
文件
对象似乎是由一个
用户
创建的,可以与其他用户共享。由于您有
文件\u id
,下面的查询应该可以工作

file = File.objects.get(id=files_id)
# Assuming one file is shared only ones by an user
# otherwise you should use filter instead of get
shared_file = Share.objects.get(file=file, user=request.user)

为什么要使用
TextField
存储
DateTime
?你应该使用
DateTimeField

然后我的答案就可以了。请注意,您的ForeignKey名称非常混乱:一个文件只有一个用户,共享只有一个用户和一个文件。最好用单数来命名这些字段。是的,这是可行的,但如何同时从共享表中获取属性呢。我决定在Share表中添加shared_date属性。如何获取共享的\u日期?我正在使用我的模型执行此操作:file=Share.objects.filter(users\u id=log\u id)shared\u file=file.objects.filter(users\u id=file)我得到以下错误:(1242,'子查询返回超过1行')我在上面的注释Share.objects.get()中提到,您应该使用Share.objects.filter(file=file,user=request.user)如果一个用户可以多次共享一个文件首先我想在共享表中查询以找出用户id属于request.user然后我想在文件中查询以获取文件属性。在查询用户的共享对象之前,您有文件id,对吗?然后您可以先获取文件对象。之后,您可以使用此文件对象来获取文件属性按当前用户删除文件的所有共享。如果要查看用户的所有共享(而不仅仅是单个文件),可以使用Share.objects.filter(user=request.user)。我使用的是:file=file.objects.filter(users\u id=log\u id)shared\u file=Share.objects.get(files\u id=file,users\u id=log\u id)log_id是request.user.id---------->我收到了这个错误:(1242,‘子查询返回超过1行’)