在Django表单中跨表格显示/编辑字段

时间:2010-05-22 18:58:26

标签: django django-models django-forms

我有2个表/模型,出于所有实际目的,它们与标准的作者/书籍示例相同,但有一个额外的限制,即在我的应用程序中每个作者只能写0或1本书。 (例如,Book模型中的ForeignKey字段是或者可以是OneToOneField,并且可能有作者在Book表中没有相应的书。)

我希望能够显示一个显示多本书籍的表格,并显示相应作者表格中的一些字段(例如author_name,author_address)。我按照inlineformset的示例进行了操作,但是在生成的表单中甚至没有显示作者姓名。

编辑---添加了代码示例

# Models
class Author(models.Model):
    name = models.CharField(max_length=100)
    address = models.CharField(max_length=100)

class Book(models.Model):
    author = models.OneToOneField(Author)
    title = models.CharField(max_length=100)

# views
def manage_books(request):
    author = Author.objects.get(pk=1)
    BookInlineFormSet = inlineformset_factory(Author, Book)
    formset = BookInlineFormSet(instance=author)
    return render_to_response("manage_books.html", {
        "formset": formset,
    })

# template
<table>
<tr>
<th>Author</th>
<th>Address</th>
<th>Title</th>
</tr>
{% for form in formset.forms %}
<tr>
<td>{{ form.author }}</td>
<td>{{ form.author_address }}</td>
<td>{{ form.title }}</td>
</tr>
{% endfor %}
</table>

作者和Author_address的输出为空白 注意如果我在模型中定义 unicode 函数,我可以让作者打印,但这并不能解决一般问题。另请注意,form.author.address也不起作用。

1 个答案:

答案 0 :(得分:0)

我是Django的新手,但我认为这就是你所追求的。

尝试将null = True添加到OneToOneField。例如:

book = model.OneToOneField(Book, null=True)

关于第二部分,内联表单是您正在寻找的。我假设你的表格中某处有错误,或者更可能是你的模板。你添加了(例如):

{{ author_formset.as_p }}
在{{form.as_p}}下的模板中

如果这不是问题,您可能需要发布相关的模板,视图,模型和&amp;表格代码。

相关问题