0

我在 Django 中有两个表:第一个是file具有文件信息的表,第二个是share具有共享信息 的表:files_id是表的外键Share:现在,我想检索在共享表中具有 files_id 的文件信息(来自 File 表) . 我怎样才能做到这一点?

#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()

我想用 users_id 获取 file_information 是 log_id 并获取 shared_date 。我得到 log_id 为:log_id = request.user.id

4

2 回答 2

0

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

大概你想要类似的东西:

File.objects.exclude(share=None)
于 2013-01-21T09:14:56.240 回答
0

我对您的模型进行了一些更改,以消除plural namesforuserfile. 我认为您将它们命名为因为您已经拥有一些数据库。

#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()

因此,从上述两种模型看来,File对象是由一个User可以与其他用户共享的对象创建的。既然你有files_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.

于 2013-01-21T18:53:46.237 回答