1

モデル:

class Author(models.Model):
   ...
   first_name = models.CharField(max_length=30)
   ...

class Book(models.Model):
   title = models.CharField(max_length=100)
   authors = models.ManyToManyField(Author)
   ...

フォーム:

class BookForm(ModelForm):
    class Meta:
        model = Book

booklist.html:

<table>
{{ formset.management_form }}
{% for form in formset.forms %}
  <tr>
    <td> {{ form.title.value }} </td>
    <td> {{ form.authors }} </td>

  </tr>
{% endfor %}
</table>

したがって、これにより、各本の著者に対して複数の選択ボックスが出力されます。テンプレートで作成者のfirst_nameを取得するにはどうすればよいですか?

ありがとう、アディ

編集:ビューを追加

ビュー:

def thebooks(request):
  BookFormSet = modelformset_factory(Book, form = BookForm)
  if request.method == 'POST':
    formset = BookFormSet(request.POST)
    if formset.is_valid():
      formset.save()
  else:
    formset = BookFormSet(queryset = Book.objects.all())
  return render_to_response('thebooks.html', {'formset': formset,}, context_instance=RequestContext(request) )

def booklist(request):
  BookFormSet = modelformset_factory(Book, form = BookForm)
  formset = BookFormSet(request.POST)
  return render_to_response('booklist.html', {'formset':formset,}, context_instance=RequestContext(request) )

ブックリストページをブックリストページにロードするためのjsコード:

$(document).ready(function() {
      $("#form").submit(function() {
        $.post('/books/booklist/', $(this).serialize(),
          function(data) {
            if (data == "") { alert("No data returned!"); return; }
            // otherwise set the content div to the data we received
            $('#allElements').html(data);
          }
        );
        // disable normal submitting of the form since we use ajax now
        return false;
        });
    });
4

2 に答える 2

1

次のような編集フォームでモデル インスタンスにアクセスできます。

<td>
    {% if form.instance.pk %}{# if this is the form of an existing book #}
        {% for author in form.instance.authors.all %}
            {# then you can iterate over the authors of the book #}
            {{ author.first_name }}
        {% endfor %}
    {% endif %}
</td>
于 2012-02-21T12:35:51.147 に答える
0

Authors のモデル クラスでunicodeメソッドを使用できます。

class Author(models.Model):
   ...
   first_name = models.CharField(max_length=30)
   ...
   def __unicode__(self):
       return first_name

ドロップダウンでは {{ form.authors }} を使用してください。Author: Model Object (または通常の名前) の代わりに、名前が John の場合は "John" と表示されます。

もちろん、ここでの利点は、一度選択した ID にも直接アクセスできることです。

于 2012-02-21T14:22:46.137 に答える