gpt4 book ai didi

Django admin - 如果编辑对象,则删除字段

转载 作者:行者123 更新时间:2023-12-04 15:04:49 26 4
gpt4 key购买 nike

我有一个可通过 Django 管理区域访问的模型,如下所示:

# model
class Foo(models.Model):
field_a = models.CharField(max_length=100)
field_b = models.CharField(max_length=100)

# admin.py
class FooAdmin(admin.ModelAdmin):
pass

假设我想在用户添加对象时显示 field_a 和 field_b,但如果用户正在编辑对象,则只显示 field_a。有没有一种简单的方法可以做到这一点,也许使用 fields 属性?

如果出现这种情况,我可以破解一个 JavaScript 解决方案,但这样做根本不合适!

最佳答案

您可以创建自定义 ModelForm让管理员删除 __init__ 中的字段

class FooForm(forms.ModelForm):
class Meta(object):
model = Foo

def __init__(self, *args, **kwargs):
super(FooForm, self).__init__(*args, **kwargs)
if self.instance and self.instance.pk:
# Since the pk is set this is not a new instance
del self.fields['field_b']

class FooAdmin(admin.ModelAdmin):
form = FooForm

编辑:从约翰关于使字段只读的评论中得到提示,您可以将其设为隐藏字段并覆盖干净以确保该值不会更改。
class FooForm(forms.ModelForm):
class Meta(object):
model = Foo

def __init__(self, *args, **kwargs):
super(FooForm, self).__init__(*args, **kwargs)
if self.instance and self.instance.pk:
# Since the pk is set this is not a new instance
self.fields['field_b'].widget = forms.HiddenInput()

def clean_field_b(self):
if self.instance and self.instance.pk:
return self.instance.field_b
else:
return self.cleaned_data['field_b']

关于Django admin - 如果编辑对象,则删除字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2866896/

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