テスト開発のpythonジャンゴ - 32.admin背景多の関係のManyToManyField

序文

本は複数の著者を持つことができ、複数の本を書くことができます著者は、この関係はBenpianは、多くの関係を言っています。
Djangoのデータベース設計時間内のこのシーンは、のManyToManyFieldメソッドを使用する必要があります

多くのテーブルのデザイン

著者の情報ブック(書籍情報)テーブルを置く基本的な情報の筆者(著)テーブルには、本book_auth(著)関連した筆者のテーブルを本を置きます。

# models.py
from django.db import models

# Create your models here.

class Auther(models.Model): '''作者''' name = models.CharField(max_length=10, verbose_name="作者") mail = models.CharField(max_length=30, verbose_name="邮箱") city = models.CharField(max_length=10, verbose_name="城市") class Meta: verbose_name_plural = '作者' def __str__(self): return self.name class Book(models.Model): '''书籍详情''' book_name = models.CharField(max_length=50, verbose_name="书名") auth = models.ManyToManyField(Auther, verbose_name="作者") class Meta: verbose_name_plural = '书籍详情' def __str__(self): return self.book_name

背景admin.pyページが表示さを設定し、認証ブックを横断するために必要な著者情報、およびそのリストに戻ります

# admin.py
from django.contrib import admin
from hello import models # Register your models here. class ControlAuther(admin.ModelAdmin): # 显示的字段 list_display = ["name", "city", "mail"] class ControlBook(admin.ModelAdmin): # 显示的字段 list_display = ["book_name", "作者"] # 定义一个方法,遍历book的auth,然后用列表返回 def 作者(self, obj): return [a.name for a in obj.auth.all()] admin.site.register(models.Auther, ControlAuther) admin.site.register(models.Book, ControlBook)

次の二つの良いテーブル設計の実装後

現在のディレクトリ内のフォルダが生成されますmakemigrations移行は、フォルダの内容が実行されるデータベースの内容であります

python manage.pyのmakemigrations

ステップは、マイグレーションを実行する前にファイルを生成することで移動し、このステップでは、データベースの動作であります

python manage.pyの移行

背景管理ページ

情報のカップルを追加するには、管理者の管理ページを開きます。

そして、書籍情報ページを開き、タイトルや著者を追加し、複数の著者をチェックするには、Ctrlキーを押したまま

データベースビュー

Viewデータベーステーブルは予約と筆者テーブルに加えて、book_autherテーブルのよりになることがわかります(自動的に生成)

book_autherは自動的に対応関係テーブルを記録します

おすすめ

転載: www.cnblogs.com/mashuqi/p/11008794.html