【问题标题】:Display/Edit fields across tables in a Django Form在 Django 表单中跨表显示/编辑字段
【发布时间】:2011-02-22 18:43:40
【问题描述】:

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

我希望能够显示一个显示多本书的表单,并显示相应作者表中的一些字段(例如作者姓名、作者地址)。我遵循了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 和 Author_address 的输出为空 请注意,如果我在模型中定义 unicode 函数,我可以让作者打印,但这并不能解决一般问题。另请注意,form.author.address 也不起作用。

【问题讨论】:

  • 如果你展示一些你正在尝试的代码会很棒
  • 下面发布的示例代码。感谢询问

标签: django django-models django-forms


【解决方案1】:

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

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

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

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

{{ author_formset.as_p }}

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-04
    • 1970-01-01
    • 2020-03-01
    • 2023-03-18
    • 2021-11-10
    • 2017-07-29
    • 2020-10-24
    相关资源
    最近更新 更多