我想在模型管理员上有自定义视图。
当前行为:
当我点击模型对象(1)时,我需要site/app_label/1/change
,
这导致使用其内联编辑对象。
我想要实现的目标:
当我点击一个对象应该重定向到site/app_label/1
时,它应该显示其内联的列表视图(不是可编辑的列表)我将放置一个单独的按钮,这将导致site/app_label/1/change
我希望这个列表视图类似于Django默认样式列表。
我的两个模特是:
class RunConfig(models.Model):
config_name = models.CharField(max_length=100,blank=False,null=False, unique=True )
class Jobs(models.Model):
config_name = models.ForeignKey('RunConfig',on_delete=models.CASCADE,)
job_name = models.TextField(blank=True,null=True, )
parameters = models.TextField(blank=True,null=True, )
exec_order = models.IntegerField(help_text="Execution Order")
admin.py
class JobsInline(SortableInlineAdminMixin, admin.TabularInline):
model = Jobs
extra = 1
class RunConfigAdmin(admin.ModelAdmin):
list_display = ('config_name',)
到目前为止我一直在尝试:
我的计划是覆盖更改列表模板,但这不起作用,因为它开始抱怨找不到app_list的反向匹配
admin.py中的添加了自定义网址
def get_urls(self):
urls = super(RunConfigAdmin, self).get_urls()
my_urls = [
url(r'^(?P<pk>[0-9]+)/$', self.admin_site.admin_view(RunConfigDetailView.as_view(), cacheable=True), name='rc-detail'),
]
return my_urls + urls
创建了一个关于views.py的详细视图我希望使用context['job']
来实现结果会更容易但是我失败了:(
class RunConfigDetailView(LoginRequiredMixin,DetailView):
model = RunConfig
context_object_name = 'rc_detail'
def get_context_data(self,**kwargs):
context = super(RunConfigDetailView, self).get_context_data(**kwargs)
context['opts'] = self.model._meta
context['jobs'] = Jobs.objects.filter(config_name=self.object.id)
return context