gpt4 book ai didi

python - 无法编辑但可以在 Django 管理中添加新的内联

转载 作者:行者123 更新时间:2023-11-28 18:20:11 24 4
gpt4 key购买 nike

这是我的模型

class Note():
note = models.TextField(null=False, blank=False, editable=True)
user = models.ForeignKey(to=User, null=True, blank=True)

content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey("content_type", "object_id")

下面是我创建此模型以合并到任何管理员中的内联

class NoteInline(GenericTabularInline):
model = Note
extra = 0

我在这里需要的是,我想查看所有当前的笔记,但不希望登录用户编辑它们。目前用户可以编辑旧的和添加新的。所以这就是我所做的,

class NoteInline(GenericTabularInline):
model = Note
extra = 0

def get_readonly_fields(self, request, obj=None):
if obj and 'change' in request.resolver_match.url_name:
return ['note', 'user', ]
else:
return []

但现在如果用户添加新注释,他会看到禁用(不可编辑)的注释文本区域。但是,用户可以看到不可编辑的旧字段。

如何实现这个功能?

最佳答案

我也有同样的疑问。

但是,我不关心内联中的字段是否为“只读”。我只是不想在创建后更改它们。

为此,我在 forms.py 中创建了一个 NoteForm,如果实例在具有初始数据时发生更改,则会引发验证错误:

class NoteForm(forms.ModelForm):
def clean(self):
if self.has_changed() and self.initial:
raise ValidationError(
'You cannot change this inline',
code='Forbidden'
)
return super().clean()

class Meta(object):
model = Note
fields='__all__'

管理员.py:

class NoteInline(GenericTabularInline):
model = Note
extra = 0
form = NoteForm

关于python - 无法编辑但可以在 Django 管理中添加新的内联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45593095/

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