gpt4 book ai didi

python - Django:根据作为另一个模型值输入的参数自动选择模型

转载 作者:太空宇宙 更新时间:2023-11-04 06:33:01 24 4
gpt4 key购买 nike

我正在创建一个 Django 文件浏览器应用程序,它可以在其中抓取文件并使元数据可供查看和搜索。

最初将文件作为"file"对象输入后,我想根据文件的扩展名创建“视频”、“音乐”或“文档”。

一些模拟模型...

class File(models.Model):
createdate = models.DateTimeField('date file entered', db_index=True, auto_now_add=True)
cdate = models.DateTimeField()
hash = models.CharField(max_length=14, default=_make_hash, unique=True)
slug = models.SlugField(blank=True, unique=True)
filename = models.CharField(db_index=True, max_length=2048)
fullpath = models.CharField(max_length=2048)
folder = models.CharField(max_length=2048)


class Video(models.Model):
createdate = models.DateTimeField('date file entered', db_index=True, auto_now_add=True)
imdblink = models.CharField(max_length=2048)
container = models.CharField(max_length=2048)


class Music(models.Model):
createdate = models.DateTimeField('date file entered', db_index=True, auto_now_add=True)
bitrate = models.CharField(max_length=2048)
artistname = models.CharField(max_length=2048)
songname = models.CharField(max_length=2048)


class FileType(models.Model):
typename = models.CharField(max_length=256)
extension = models.ForeignKey(FileExtension)


class FileExtension(models.Model):
extension = models.CharField(max_length=256)
  1. 将使用“avi、mpg、mp4、mkv”创建视频文件类型,使用“mp3、flac”等创建音乐文件类型。
  2. Django 应用程序将在 Video1.avi、Video2.mpg、Song1.mp3、Song2.flac 等上运行。它们将作为文件对象输入到数据库中。
  3. 在保存 File 对象时,应用会查看文件扩展名,将其与列表进行比较,然后选择 FileType 模型布局的适当模型。

我希望将模型选择参数保留为数据库条目,这样我就可以添加或删除而无需更改应用程序。

我不确定如何引用我希望 FileType 条目是哪个模型。

如有任何建议或意见,我们将不胜感激。

最佳答案

如果我必须做你想做的事,我会让 FileType 模型包含另一个名为 file_type_model_classCharField。它将包含模型类的名称,例如 Music。您可以使用如下方式实例化您的类:

ft = FileType.objects.get(pk = some_id)
module = __import__('ff.models')
class_ = getattr('ff.models', ft.file_type_model_class)
instance = class_()

关于python - Django:根据作为另一个模型值输入的参数自动选择模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14722104/

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