我正在创建一个Django文件浏览器应用程序,用于抓取文件并使元数据可供查看和搜索。
在最初作为“文件”对象输入文件后,我想根据文件的扩展名创建“视频”,“音乐”或“文档”。
一些模拟模型......
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)
我希望将模型选择参数保留为数据库条目,这样我就可以添加或删除而无需更改应用程序。
我不确定如何引用我希望FileType条目的模型。
任何建议或意见都将不胜感激。
答案 0 :(得分:0)
如果我必须执行您要执行的操作,我会将FileType
模型包含另一个名为CharField
的{{1}}。它将包含模型类的名称,例如file_type_model_class
。您可以使用以下内容实例化您的类:
Music
答案 1 :(得分:0)
如果您尝试将文件实例与视频或音乐相关联,则可能需要尝试Generic Foreign Key
class File(models.Model):
# Your other fields...
file_type = models.ForeignKey(ContentType,
limit_choices_to={"model__in": ("video", "music")},
help_text=_("Is this video or music?"))
file_id = models.PositiveIntegerField(
help_text=_("Which specific video or music (by ID)?"))
file_object = generic.GenericForeignKey(ct_field="file_type",
fk_field="file_id")
def save():
# Do your work here on self.filename to determine self.file_type