gpt4 book ai didi

django文件夹模型

转载 作者:行者123 更新时间:2023-12-05 06:46:57 27 4
gpt4 key购买 nike

我想知道如何为用户、文件夹、文件创建django 关系模型

一个用户可以有多个文件和文件夹。

一个文件夹可以有很多文件,但不能有文件夹int folder。

我试过类似的东西(我一天前开始学习 django)。

我从 djangobook 上阅读了一些关于 ForeignKey 和 ManytoMany 关系的文档,但我不确定我是否理解所有这些。

用户模型

class User_t(models.Model):
username = models.CharField(max_length=30)
user_id = models.CharField(max_length=30)
pcw = models.CharField(max_length=30)
name = models.CharField(max_length=30)
surname = models.CharField(max_length=30)
mail = models.EmailField(max_length=50)
validateMail = models.BooleanField()
birthday = models.DateTimeField(max_length=60)
premium = models.BooleanField()
premiumEnd = models.DateTimeField(max_length=10)
totalUpload = models.CharField(max_length=15)
avatar = models.URLField()

文件模型

class FileItem(models.Model):
file_id = models.CharField(max_length=30)
file_name = models.CharField(max_length=75)
date_upload = models.DateTimeField(max_length=10)
data_size = models.CharField(max_length=75)
key = models.CharField(max_length=75)
owner_id = models.OneToManyField(User_t)
login_accept = models.ManyToManyField(User_t)
file_i = models.FileField(/mnt/test/)

文件夹模型

class FolderItem(models.Model):
folder_id = models.CharField(max_length=30)
folder_name = models.CharField(max_length=75)
data_size = models.CharField(max_length=75)
key = models.CharField(max_length=75)
owner_id = models.ForeignKey(User_t)
login_accept = models.ManyToManyField(User_t)
files = models.ForeignKey(FileItem)

最佳答案

对于这种事情,您需要使用一对多关系。所以这个想法是用户可以有很多文件夹,每个文件夹里面可以有很多文件。从您的示例代码中,您误解了如何对这些类型的关系进行编码。在我解释之前,让我们退后一步,弄清楚所有这些理想情况下应该如何存储在数据库中。

您必须拥有三个表 - 用户、文件夹和文件。每个表内部都会有很多行,而使每一行独一无二的是我们称之为主键的东西。通常这是一个整数。因此,每个用户、文件夹和文件都将在自己的表中拥有自己唯一的主键。

为了将文件包含到文件夹中,每个文件都必须存储它属于哪个文件夹。这是使用外键的地方。在文件表中,将有列 folder ,该列将使用外键指定该文件属于哪个文件夹。例如,考虑以下行:

id | folder | name | ...
---+--------+------+----
1 | 5 | foo | ...

这告诉您该文件属于主键为 5 的文件夹。

因此在一对多关系中,子表必须指定它属于哪个表,而不是像示例代码中那样指定父表/模型。

以下是对您的代码的修复(除了我不知道 logic_accept 的用途):

class User_t(models.Model):
username = models.CharField(max_length=30)
user_id = models.CharField(max_length=30)
pcw = models.CharField(max_length=30)
name = models.CharField(max_length=30)
surname = models.CharField(max_length=30)
mail = models.EmailField(max_length=50)
validateMail = models.BooleanField()
birthday = models.DateTimeField(max_length=60)
premium = models.BooleanField()
premiumEnd = models.DateTimeField(max_length=10)
totalUpload = models.CharField(max_length=15)
avatar = models.URLField()

class FileItem(models.Model):
file_id = models.CharField(max_length=30)
file_name = models.CharField(max_length=75)
date_upload = models.DateTimeField(max_length=10)
data_size = models.CharField(max_length=75)
key = models.CharField(max_length=75)
# Django will automatically create owner_id field
owner = models.ForeignKey(User_t, related_name='files')
folder = models.ForeignKey('FolderItem', related_name='files')
# not sure what this (login_accept) is for...
# login_accept = models.ManyToManyField(User_t)
file_i = models.FileField(/mnt/test/)

class FolderItem(models.Model):
folder_id = models.CharField(max_length=30)
folder_name = models.CharField(max_length=75)
data_size = models.CharField(max_length=75)
key = models.CharField(max_length=75)
owner = models.ForeignKey(User_t, related_name='folders')
# again, not sure what this is for
# login_accept = models.ManyToManyField(User_t)

关于django文件夹模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13095132/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com