Book
とPage
の2つのモデルがあります。ここでPage
はBook
と外部キーの関係にあります。 admin.pyでは、書籍を変更するWebページにPage
オブジェクトのインライン要素があります。Djangoの外部キーに依存する条件を検証するadmin
models.py:
class Book(models.Model):
# ...
class Page(models.Model):
book = models.ForeignKey(Book, editable=False)
number = models.IntegerField('Page number')
# ...
はadmin.py:インライン形で
class PageAdminInline(admin.TabularInline):
model = Page
extra = 1
class BookAdmin(admin.ModelAdmin):
inlines = [PageAdminInline]
admin.site.register(Book, BookAdmin)
、フィールドは、各ページのページ番号を設定することを可能にします。この設定では、書籍のすべてのページ番号が1から書籍に関連付けられたPage
オブジェクトの数まで異なる必要があるというグローバル条件を検証するにはどうすればよいですか?
ブックモデルやフォームに関連するclean()
メソッドをオーバーライドする必要があると思いますが、そこからユーザーが入力したページに関連するデータへのアクセス方法はわかりません。
編集
Emettの提案に基づいて、私はPage
モデルのclean()
方法上書きしようとしている:私はすべてのページのページ番号を変更した場合:これは動作しません
class Page(models.Model):
book = models.ForeignKey(Book, editable=False)
number = models.IntegerField('Page number')
def clean():
book_pages = Page.objects.filter(book=self.book)
# ... [apply condition on the book_pages QuerySet]
super(Page, self).clean()
を書籍の管理サイトでは、book_pages
には古いページ番号のオブジェクトが含まれます。
さらに、Page
でチェックされた条件は、nページあるとn回テストされることを意味します。一度確認すれば十分です。
これはあなたの 'models.py'に行われる必要があるに。あなたはモデルを提供してもらえますか? –
@EmettSpeer本当ですか? models.pyでは、検証時にデータベースに保存されていない '' Page''オブジェクトの '' Book''メソッドインスタンスにアクセスする必要があります。 – mimo
データベースに新しいページを保存するときに、ページにブックが添付されている必要があります。これは、システムがこのロジックをプリフォームにするのが適切な時期になります。この問題のためには、「一人暮らし」が正しい選択肢になるようです。 https://docs.djangoproject.com/en/1.10/ref/models/options/#unique-together –