在Django管理員的change_form中,在兩個模型字段之間添加自定義HTML

2024-04-29 19:52:50 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有两个模型:

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)  

在库更改表单模板中的名称和地址之间添加一些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 %}

新解决方案:

我找到了一个更好的方法,但我不知道为什么会出现这个错误:“prespuestoadmin.readonly_fields1,'name'不是可调用的或prespuestoadmin的属性,也不是在模型'prespuesto'中找到的。”。“name”字段似乎没有添加到管理员使用的表单中。

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) 

Tags: 方法name模型dividfieldadminmodels