为django admin中的任何应用程序添加表单,对于该模型的外键字段..带有添加按钮的下拉列表(在弹出窗口中打开).我们可以有一个表单,我们可以在同一个表单中添加外键模型字段.
例如
class UserProfile(models.Model):
user = models.ForeignKey(User, unique=True)
contact = models.ForeignKey(Contact, blank=True, null=True)
Run Code Online (Sandbox Code Playgroud)
对于用户和联系人字段,管理员添加表单中存在带添加按钮的下拉列表.我们可以在同一页面中拥有用户和联系人的所有字段吗?
我有这些模型:
(伪代码)
Course:
ForeignKey(Outline, null=True, blank=True)
ForeignKey(OutlineFile, null=True, blank=True)
Outline:
//data
OutlineFile:
//different data
Run Code Online (Sandbox Code Playgroud)
情况是任何课程都可以有一个与之关联的大纲,和/或一个OutlineFile,或两者都没有.大纲可以与多个课程相关联,类似地,大纲文件可以与多个课程相关联.但是,一门课程最多只能有一门课程.
我想要的是让课程更改管理页面显示所有课程字段,并为每个Outline和OutlineFile下拉.如果选择了一个,我希望显示和修改该大纲的字段,就像内联字段一样.
我应该以某种方式重组我的模型,还是已经充分构建了它们?无论如何在当前的内联系统范围内做我想做的事情吗?
最后,如果不可能,我从哪里开始以自定义方式进行?
假设我有两个模型:
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 = …Run Code Online (Sandbox Code Playgroud)