mfa*_*con 4 python django django-admin
假设我有两个模型:
class Book(models.Model):
name = models.CharField(max_length=50)
library = models.ForeignKeyField('Library')
class Library(models.Model):
name = models.CharField(max_length=50)
address = models.CharField(max_length=50)
tel = models.CharField(max_length=50)
Run Code Online (Sandbox Code Playgroud)
有没有一种很好的方法在库change_form模板中的名称和地址之间添加一些html(只读输入字段)?我这样做会覆盖admin/includes/fieldset.html,但它变得凌乱,我找不到一种方法来显示html到底我想要的位置.例如,如果我想添加html,显示图书馆名称字段下面的图书数量,我会这样做:
{% for field in line %}
...
{% if field.field.name == 'name' %}
{{ field.field }}
<div class="form-row total_books">
<div>
<label for="total_books">Total books:</label>
<input type="text" maxlength="10" name="totbooks" id="totbooks" readonly="readonly">
</div>
</div>
{% else %}
{{ field.field }}
{% endif %}
...
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
新解决方案:
我发现了一个更好的方法,但我不知道为什么会出现这个错误:"PresupuestoAdmin.readonly_fields 1,'name'不是可调用的,也不是PresupuestoAdmin的属性',或者在模型'Presupuesto'中找到".似乎"名称"字段未添加到管理员使用的表单中.
class FoooAdminForm(forms.ModelForm):
name = models.CharField(max_length=100)
class Meta:
model = Foo
class FooAdmin(admin.ModelAdmin):
form = FooAdminForm
fieldsets = (
(None, { 'fields': ('id', 'name', 'date')}),
)
readonly_fields = ('id', 'name')
admin.site.register(Foo, FooAdmin)
Run Code Online (Sandbox Code Playgroud)
models.py:
class Library(models.Model):
name = models.CharField(max_length=50)
address = models.CharField(max_length=50)
tel = models.CharField(max_length=50)
def book_count(self):
return self.book_set.count()
Run Code Online (Sandbox Code Playgroud)
admin.py:
class LibraryAdmin(admin.ModelAdmin):
fieldsets = (
(None, { 'fields': ('name', 'book_count', 'address', 'tel' )}),
)
readonly_fields = ('book_count',)
admin.site.register(Library, LibraryAdmin)
Run Code Online (Sandbox Code Playgroud)
class FooAdminForm(forms.ModelForm):
name = forms.CharField(max_length=100,
widget=forms.TextInput(attrs={'readonly': 'readonly'}))
def __init__(self, *args, **kwargs):
super(FooAdminForm, self).__init__(*args, **kwargs)
self.fields['name'].required = False
if kwargs.has_key('instance'):
instance = kwargs['instance']
# do something with the instance here if you want
class Meta:
model = Foo
class FooAdmin(admin.ModelAdmin):
form = FooAdminForm
fieldsets = (
(None, {
'fields': ('id', 'name',),})
)
readonly_fields = ('id',)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5031 次 |
| 最近记录: |