gpt4 book ai didi

python - 创建 Django 管理中级页面

转载 作者:太空狗 更新时间:2023-10-30 00:56:44 27 4
gpt4 key购买 nike

当我在 django admin 中保存模型时,我需要一种方法来显示中间页面。

我想要完成的是在“保存”一个模型之后,显示一个页面,其中排列了模型的所有属性,然后有一个显示 Print 的按钮。我过去常常在单击 save 时使用 Jquery dialog div 来解决这个问题。这意味着我在实际保存模型之前显示了设置打印 View ,但我现在需要先验证模型。

这类似于“删除模型”操作的实现方式。不过,我似乎找不到从哪里开始寻找。

编辑:我开始在 django.contrib.admin.options.py 中寻找 response_changeresponse_add 方法。虽然不确定如何覆盖它们。而且它只需要一个特定的模型,所以它不是通用的。我还发现了类 ModelAdmin 中的模板列表。仍然不确定如何在不破解管理员权限的情况下继续进行。

编辑 2:在下面添加了我的工作解决方案。

最佳答案

您可以创建一个表单,为“您确定吗”步骤添加额外的验证步骤。

在我们的 models.py 中给出这个模型:

from django.db import models

class Person(models.Model):
name = models.CharField(max_length=100)

在forms.py中添加一个表单:

from django import forms
from .models import Person

class PersonForm(forms.ModelForm):
i_am_sure = forms.BooleanField(required=False, widget=forms.HiddenInput())

def __init__(self, *args, **kwargs):
super(PersonForm, self).__init__(*args, **kwargs)

if self.errors.get('i_am_sure'):
# show the 'are you sure' checkbox when we want confirmation
self.fields['i_am_sure'].widget = forms.CheckboxInput()

def clean(self):
cleaned_data = super(PersonForm, self).clean()

if not self.errors:
# only validate i_am_sure once all other validation has passed
i_am_sure = cleaned_data.get('i_am_sure')
if self.instance.id and not i_am_sure:
self._errors['i_am_sure'] = self.error_class(["Are you sure you want to change this person?"])
del cleaned_data['i_am_sure']

return cleaned_data

class Meta:
model = Person

如果你想在 Django admin 中使用它。在您的 admin.py 中指定此表单:

from django.contrib import admin
from .forms import PersonForm
from .models import Person

class PersonAdmin(admin.ModelAdmin):
form = PersonForm

admin.site.register(Person, PersonAdmin)

但是请注意,在 Django 管理表单上存在隐藏输入的错误。 There's a solution to that on this Stack Overflow question .

关于python - 创建 Django 管理中级页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15169994/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com