gpt4 book ai didi

python - Django 的内联管理 : a 'pre-filled' field

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

我正在处理我的第一个 Django 项目,我希望用户能够在管理员中创建自定义表单,并根据需要向其中添加字段。为此,我在我的项目中添加了一个可重用的应用程序,可在 github 上找到:

https://github.com/stephenmcd/django-forms-builder

我遇到了麻烦,因为我想让它成为每个表单的“默认”字段,因为它在任何情况下都是必要的(顺便说一下我的, 此处无关紧要,但该字段对应于 map 上的一个点)。

此 django-forms-builder 应用程序的重要代码部分,展示了 admin.TabularInline 的使用:

#admin.py
#...
class FieldAdmin(admin.TabularInline):
model = Field
exclude = ('slug', )


class FormAdmin(admin.ModelAdmin):
formentry_model = FormEntry
fieldentry_model = FieldEntry

inlines = (FieldAdmin,)
#...

所以我的问题是:在最近的 Django 版本中是否有任何简单的方法来为管理员“TabularInline”添加默认值(已填充的字段)?如果不可能,我将非常感谢您的指点到某个地方我可以学习如何解决这个问题。

重要提示:我在这里搜索了类似的问题,甚至用谷歌搜索了这个问题。 我发现了一些旧问题(全部来自 2014 年或更早)提到这种可能性不是由 Django 直接提供的。考虑到我是 Django 初学者,答案涉及有些复杂/令人困惑的建议。

最佳答案

有几种方法可以实现这一点。

1:在模型中的字段上设置一个默认值。

Django 的动态管理表单和内联非常智能,可以检测到这一点并自动将其显示为默认选项或条目。

class Book(models.Model):

rating = models.IntegerField(default=0)

2:在您的 TabularInline 类中使用自定义表单。

class BookInlineForm(models.ModelForm):

class Meta:
model = Book
fields = ('rating', )

def __init__(self, *args, **kwargs):
initial = kwargs.pop('initial', {})
# add a default rating if one hasn't been passed in
initial['rating'] = initial.get('rating', 0)
kwargs['initial'] = initial
super(BookInlineForm, self).__init__(
*args, **kwargs
)


class BookTabularInline(admin.TabularInline):
model = Book
form = BookInlineForm


class ShelfAdmin(admin.ModelAdmin):
inlines = (BookAdmin,)

关于python - Django 的内联管理 : a 'pre-filled' field,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40581522/

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