8

Edit/Updatedjangoを使用してモデルオブジェクト(レコード)を作成しようとしていますUpdateview

model.py

from django.db import models
from myapp.models import Author

class Book(models.Model):
    author = models.ForeignKey(Author)
    book_name = models.CharField(max_length=260)
    amount = models.DecimalField(
        max_digits=10, decimal_places=2, default=0.00)

    description = models.TextField()

ビュー.py

class BookEditView(generic.UpdateView):
    model = Book
    template_name_suffix = '_update_form'
    exclude = ('author',)

    def get_success_url(self):
        return reverse("books:list_of_books")

books_update_from.html

{% extends "base.html" %}
{% block main_title %}Edit Book{% endblock %}
{% block content %}
  <form method="post" action="" class="form-horizontal">
     {{form.as_p}}
  </form>
{% endblock %}

フォームがレンダリングされると、上記のようAuthorに言及したにもかかわらず、外部フィールドがまだページに表示さexcludeBookEditviewます

では、そのフィールドを非表示にしてフォームを送信する方法は?

form.book_nameまた、などの個々のフィールドをレンダリングしてみましたform.amount(このアプローチでは上記の問題が解決されないことはわかっていますが、愚かな試みが行われただけです)。フォームを送信すると、そのアクションは無視でき、何もしませauthor foreign key valueん。フォームを送信していないため、フォームは無効であり、送信しても何もしません

だから私が知りたいのは、モデルUpdateViewを編集するために使用するフォームとしてレンダリングするときにモデルからフィールドを除外する方法です(私のコードで何か間違ったことをしましたか?)

また、フィールドUpdateviewを除外すると、外部キー値を送信する必要がないという概念を知りたいですか?foreignKeyAuthor Foreign Key

4

1 に答える 1

15

フィールドを除外する BookForm を定義し、

class BookForm(forms.ModelForm):
    class Meta:
        model = Book
        exclude = ('author',)

次に、ビューでこのフォームを使用します

class BookEditView(generic.UpdateView):
    model = Book
    form_class = BookForm
    ...
于 2013-07-29T07:30:21.600 に答える