我有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也不起作用。
答案 0 :(得分:0)
我是Django的新手,但我认为这就是你所追求的。
尝试将null = True添加到OneToOneField。例如:
book = model.OneToOneField(Book, null=True)
关于第二部分,内联表单是您正在寻找的。我假设你的表格中某处有错误,或者更可能是你的模板。你添加了(例如):
{{ author_formset.as_p }}
在{{form.as_p}}下的模板中?
如果这不是问题,您可能需要发布相关的模板,视图,模型和&amp;表格代码。