Django 管理拖放

Dav*_*ard 6 python django drag-and-drop django-admin python-3.x

寻求一些指导,因为就我的 Django 经验而言,我正在进入新领域。我正在编写一个复印请求应用程序,因此创建了几个模型:

class Job(models.Model):
  id = models.AutoField(primary_key=True) # AutoField?


class Resource(models.Model):
  id = models.AutoField(primary_key=True) # AutoField?
  job = models.ForeignKey(Job)
  file = models.FileField(upload_to="repro/")
Run Code Online (Sandbox Code Playgroud)

管理视图包含内联资源

class ResourceInline(admin.TabularInline):
        model = Resource
        extra = 0

class JobAdmin(admin.ModelAdmin):
    model = Job
    list_display = ['requestedby','account','requestdate','requireddate','noofsides','noofcopies']
    list_filter = ['requireddate']
    search_fields = ['requestedby','account']
    form = JobForm
    fieldsets = [
        (None, {'fields': ['requestedby','account','requestdate','requireddate','noofsides','noofcopies'] }),
        ('Requirements', {'fields': ['color','sided','paper','finishing']}),
        ('Additional Information', {'fields': ['additionalinfo']}),

    ]
    inlines = [ResourceInline]
admin.site.register(Job,JobAdmin)
Run Code Online (Sandbox Code Playgroud)

我计划使用dropzone.js并为自己准备了一个可以自定义的change_form.html,但此时我有点迷失了。如何用我的拖放区替换内联并使其正常工作?

感谢您的任何帮助或指点。

克里斯

小智 5

使用adminsortable2在 Django Admin 中进行拖放。这是github 链接

因此,在您的情况下, adminsortable2的代码如下。

“模型.py”

from django.db import models

class Job(models.Model):
    id = models.AutoField(primary_key=True)
    my_order = models.PositiveIntegerField(default=0, blank=False, null=False)

    class Meta:
        ordering = ['my_order']
  
class Resource(models.Model):
    id = models.AutoField(primary_key=True)
    job = models.ForeignKey(Job)
    file = models.FileField(upload_to="repro/")
    my_order = models.PositiveIntegerField(default=0, blank=False, null=False)

    class Meta:
        ordering = ['my_order']
Run Code Online (Sandbox Code Playgroud)

“admin.js”

from django.contrib import admin
from adminsortable2.admin import SortableAdminMixin, SortableInlineAdminMixin
from .models import Job, Resource

class ResourceInline(SortableInlineAdminMixin, admin.TabularInline):
    model = Resource
    extra = 0

@admin.register(Job)
class JobAdmin(SortableAdminMixin, admin.ModelAdmin):
    list_display = ['requestedby','account','requestdate','requireddate','noofsides','noofcopies']
    list_filter = ['requireddate']
    search_fields = ['requestedby','account']
    form = JobForm
    fieldsets = [
        (None, {'fields': ['requestedby','account','requestdate','requireddate','noofsides','noofcopies'] }),
        ('Requirements', {'fields': ['color','sided','paper','finishing']}),
        ('Additional Information', {'fields': ['additionalinfo']}),
    ]
    inlines = [ResourceInline]
Run Code Online (Sandbox Code Playgroud)

然后,在编写上面的代码后运行下面的命令来保存排序:

python manage.py reorder <app.model>
Run Code Online (Sandbox Code Playgroud)

因此,就您而言,我不知道您的应用程序名称,因此如果您的应用程序名称是“work”并且我知道您的模型名称“Job”和“Resource”,那么请运行下面的命令来保存您的排序:

python manage.py reorder work.Job work.Resource
Run Code Online (Sandbox Code Playgroud)