【问题标题】:How can I add dynamic field in the model in django?如何在 django 的模型中添加动态字段?
【发布时间】:2010-05-13 08:50:44
【问题描述】:

我正在使用 django 创建一个应用程序下载站点。我尝试编写一个模型,管理员可以在管理页面中动态添加不同的下载内容。例如我有一个名为 foobar 的软件,它有 3 个不同的版本:1.1、1.2、1.3。我希望用户可以通过使用添加按钮来管理模型,以添加带有下载版本的下载链接。但我不知道如何在 django 中执行此操作。

【问题讨论】:

    标签: python database django


    【解决方案1】:

    将您的模型设置为具有主模型和具有主模型外键的辅助模型:

    class DownloadItem(models.Model):
    
       name = models.CharField( etc etc)
       ... other attributes here ...
    
    
    class DownloadItemFile(models.Model):
       parent = models.ForeignKey('DownloadItem', related_name="versions")
       version = models.CharField( etc etc)
       file = models.FileField(upload='path/to/uploaddir/')
    

    然后,当您拥有 DownloadItem 模型的实例时,您可以通过以下方式获取各种文件版本:

    mydownloaditem.versions.all()
    

    为了能够通过管理员添加文件,您需要使用内联。在相关应用的 admin.py 中,您需要添加如下内容:

    class DownloadItemFileInline(admin.TabularInline):
        model           = DownloadItemFile
    
    class DownloadItemAdminOptions(admin.ModelAdmin):
        inlines         = [ DownloadItemFileInline, ]
        ...other admin options here...    
    
    admin.site.register(DownloadItem, DownloadItem AdminOptions) 
    

    【讨论】:

    • 您好 stevejalim:感谢您的回答。有用。但是当我进入管理页面时,添加“DownloadItem”,如何显示其中包含的版本?以及如何在 DownloadItem 页面中直接添加 DownloadItemFile?
    猜你喜欢
    • 2012-06-05
    • 1970-01-01
    • 2021-06-18
    • 1970-01-01
    • 1970-01-01
    • 2015-10-21
    • 1970-01-01
    • 1970-01-01
    • 2011-12-17
    相关资源
    最近更新 更多