0

次のようなテーブルがあります。

+----+----------+----------+----------------+----------------------------------+
| id | users_id | files_id | shared_user_id | shared_date                      |
+----+----------+----------+----------------+----------------------------------+
|  3 |        1 |        1 |              2 | 2013-01-31 14:27:06.523908+00:00 |
|  2 |        1 |        1 |              2 | 2013-01-31 14:25:37.760192+00:00 |
|  4 |        1 |        3 |              2 | 2013-01-31 14:46:01.089560+00:00 |
|  5 |        1 |        1 |              3 | 2013-01-31 14:50:54.917337+00:00 |

ここで、ファイルを共有した各ファイルの所有者を知りたいです。ファイル 1 の場合、users_id は 1 です。デフォルトの Django auth_user テーブルから users_id 1 の名前を取得したいと考えています。各ファイルのユーザー名を取得したい。どうやってやるの?

#models.py
from django.db import models
from django.contrib.auth.models import User

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

class Host(models.Model):
    name = models.TextField()
    full_path = models.TextField()
4

1 に答える 1

1

前に言ったように、あなたのモデル構造は少し奇妙です。特に、Share.shared_userIntegerField ではなく、ForeignKey にする必要があります。この場合、次の表を使用して、からまでusersManyToManyField を作成することで問題を解決できます。FileUserSharethrough

class File(models.Model):
    users = models.ManyToManyField(User, through='Share')

Fileこれで、簡単に実行できるインスタンスが与えられました。

my_file.users.count()
于 2013-01-31T10:36:24.643 に答える