我正在开发我的第一个Django项目,我希望用户能够在管理员中创建自定义表单,并根据需要添加字段他们。为此,我在我的项目中添加了一个可重用的应用程序,可以在github上找到:
我遇到了麻烦,因为我想这样做,所以1个特定字段是&#39;默认&#39;因为它在每种情况下都是必要的(因为在我看来,它在这里是不相关的,但是这个字段对应于地图上的一个点)。< / p>
此django-forms-builder应用程序中的一段重要代码,显示 admin.TabularInline 的使用: 所以我的问题是:是否有任何简单的方法可以为管理员添加默认(已填充的字段)TabularInline&#39;在最近的Django版本中?如果不可能的话,我真的很感激指向某个地方,我可以学习如何解决这个问题。 重要提示:我在这里搜索过类似的问题,甚至用Google搜索了问题。 我发现了一些旧问题(全部来自2014年或更早版本)提到这种可能性并非由Django直接提供。考虑到我是一名Django初学者,答案涉及一些复杂/混乱的建议。#admin.py
#...
class FieldAdmin(admin.TabularInline):
model = Field
exclude = ('slug', )
class FormAdmin(admin.ModelAdmin):
formentry_model = FormEntry
fieldentry_model = FieldEntry
inlines = (FieldAdmin,)
#...
答案 0 :(得分:3)
有几种方法可以实现这一目标。
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,)