inline_formset缺少字段

时间:2012-06-23 19:00:42

标签: django

我添加了inline_formset。但是{{ form.name }}它没有显示在模板中。我错过了什么吗?感谢

class Album(models.Model):
    name = models.CharField(('album name'), max_length=100)
    owner = models.ForeignKey(User, verbose_name=('user'), related_name=('users'))

class Song(models.Model):
    album = models.ForeignKey(Album, verbose_name=('album'), related_name=('songs'))
    title = models.CharField(('song name'), max_length=100)
    artist = models.CharField(('artist name'), max_length=100)

inline_formset

AlbumFormSet = inlineformset_factory(Album, Song)
模板中的

   <tr>
      <td>{{ form.name }}</td> <-- its not showing
      <td>{{ form.title }} </td>
      <td>{{ form.artist }} </td>
    </tr>
{% endfor %}

{{ formset.management_form }}

更新

                 {% for form in formset %}
                    <tr>

                      <td>{{ form.title }} </td>
                      <td>{{ form.artist }} </td>
                      <td>{{album_form.name}}</td>
                      <td>{{ form.errors }}</td>
                    </tr>
                {% endfor %}

我为Album添加了单独的ModelForm,然后在forloop中添加。否则重复输入标签名称。 <input id="id_name" type="text" name="name" maxlength="100">

最新更新

我添加了以下数据。数据已保存。但是有一个奇怪的问题。仅Last Album仅保存Test 1Test 2

enter image description here

enter image description here enter image description here

enter image description here

2 个答案:

答案 0 :(得分:1)

我认为inlineformset不包含专辑模型的表单。您必须为相册创建单独的ModelForm,然后执行{{album_form.name}}

之类的操作

您可以将您的formtable与ForeignKey关联到相册,并在您的视图中使用类似的内容 -

# validation and other code
# ---------------------------
new_album = Album()
new_album_form = AlbumModelForm(request.POST,instance=new_album)
song_formset = AlbumFormset(request.POST)
new_album_form.save()
songs = song_formset.save(comit=False)
for song in songs:
    song.album = new_album
    song.save()

修改

如果您想要创建一个专辑和多个带有该专辑外键的歌曲,上述解决方案可能会有效。为了获得您想要的内容,{{form.name}}{{form.title}}{{form.artist}}使用带有名称,标题和艺术家字段的普通formset而不是modelformset。

答案 1 :(得分:0)

表单中没有name字段。该表单适用于歌曲,它们有albumtitleartist