我有型号 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)
但表单看起来与原始不同:日期/时间字段没有小部件(普通文本输入) .