我有型号 Job . 模型的字段 files 必须存储“ file1;file2;file3 ”等文件列表 . 分隔符类型无关紧要 . 我也有模型 File ,这个不存储数据库中的数据 . FileManager(models.Manager) 中为每个 objects 请求生成的对象列表

def get_queryset(self):
    qs = super(FileManager, self).get_queryset()
    if self.get_updated_qs_list(qs):
        return super(FileManager, self).get_queryset()
    else:
        return qs

当我添加新的 Job 时,我必须为新工作选择文件 . 我在 JobForm 中定义了额外字段:

class JobForm(forms.ModelForm):
    files_choose = forms.MultipleChoiceField(choices=[ (file.full_name, file.name) for file in File.objects.filter()])
    class Meta:
        model = Job
        fields = ('files_choose', [...other fields...])

我有两个问题无法解决 .

1个问题:当我从标准添加视图创建作业时,我希望在模型保存之前处理 files_choose . 但模型不知道这个领域,因为这个只存在于形式中 . 如何将选定的文件传递给模型 **def save(self, *args, kwargs)

2问题:管理员用户可以从更改列表标记文件并选择操作"Create job for files" . 接下来,必须将管理员用户重定向到带有预选文件的标准添加视图 . 我尝试使用中间页面模板进行操作,并包含 JobForm .

class FileAdmin(ModelAdmin):
    model = File
    readonly_fields=('name', 'full_name', 'mdate', 'hash', 'size', 'link', 'download_name', 'is_changed', 'is_new')
    list_display = ('name', 'full_name', 'mdate', 'hash', 'size', 'link', 'download_name', 'is_changed', 'is_new')

    def create_job_for_files(self, request, queryset):
        form=JobForm(queryset)
        return render(request, 'job_in_template.html', context={'form': form,'files':queryset})

    actions = [create_job_for_files]
    create_job_for_files.short_description = _("Create job for files")

admin.site.register(File, FileAdmin)

但表单看起来与原始不同:日期/时间字段没有小部件(普通文本输入) .