知人の配列

基本コンセプト

基本表:抽象的な形は、それ自体が、公共の場を提供するために、継承にないように設計されていない、完全なデータベースの移行

class BaseModel(models.Model):
    is_delete = models.BooleanField(default=False)
    created_time = models.DateTimeField(auto_now_add=True)

    class Meta:
        # 基表,为抽象表,是专门用来和继承,提供公有字段,自身不会完成数据库迁移
        abstract = True

テーブルの対応関係オフ

  • それも、テーブル、クエリ、業務効率に影響することはありません
  • でもテーブルCRUD業務効率が向上します
  • 後半データベース・テーブルを再構築するのは簡単
  • データベース自体もテーブルが検出されないという欠点が容易ダーティデータが存在し、必要なパラメータは、厳密な論理によって汚いを避けるために
  • 従属B、最初の挿入の記録は、米国Bに対応するレコードの記録が関連するケースの非存在下で産生され、動作を実現することができるが、データがダーティであるデータBを添加し、次いで、ダーティデータが処理されます。最初のターン動作B手順A後、満たす複数の論理的思考、同様に行うことができます。でも、テーブルルックアップテーブルABになるロジックによって、任意の例外がありません。

テーブルのリレーションシップを確立します

  • ブックのテーブルとテーブルが公開され、多くのマルチパーティ帳の外部キー
  • そして、多くの書籍の著者:高周波のいずれかで、外部キーがブックを照会します
  • 著者とAuthorDetail 1:AuthorDetailの実際のニーズに応じて正しい位置に外部キーを確立すること
class Book(BaseModel):
    name = models.CharField(max_length=64)
    price = models.DecimalField(max_digits=10, decimal_places=2)
    publish = models.ForeignKey(to='Publish', related_name='books', db_constraint=False, on_delete=models.DO_NOTHING, null=True)
    authors = models.ManyToManyField(to='Author', related_name='books', db_constraint=False)

    def __str__(self):
        return self.name


class Publish(BaseModel):
    name = models.CharField(max_length=64)
    address = models.CharField(max_length=64)


class Author(BaseModel):
    name = models.CharField(max_length=64)

class AuthorDetail(BaseModel):
    phone = models.CharField(max_length=64)
    author = models.OneToOneField(to=Author, related_name='detail', on_delete=models.CASCADE, db_constraint=False)

外部キーフィールド属性

  • 逆引き参照に外部キーフィールド名に外部キーをRelated_name:フォワード検索フィールド名、逆related_nameをチェック
  • on_delete外部キーは、システムがデフォルト(値models.CASCADE)を提供し、Djangoの2.xは、手動で明確にする必要があり、Djangoの1.1で、カスケードに示すために提供されなければなりません
    • CASCADE:デフォルト値、カスケード
    • DO_NOTHING:外部キーが連結されていない、それは、任意の処理を行わず、表A、表Bに依存する、レコード削除B、表Aの外部キーフィールドに想定されます
    • SET_DEFAULT:デフォルトの属性設定の値と仮定、表B表A、Bのレコードの削除依存表Aの外部キーフィールド、デフォルト属性が一緒に使用する必要があります
    • SET_NULL:と仮定依存表B表Aは、Bのレコードの削除は、表Aの外部キーフィールドの値がnull、nullで= Trueの場合、使用特性に使用する必要があります
  • あなたはカスケード関係に対処したい場合On_delete、多くのフィールドは、デフォルトのカスケード、カスケードに設定することができない、あなたは、テーブルには、複数の外部キーを処理し、手動でテーブル間のリレーションシップをクリアする必要があります
  • コントロールに関連付けられた外部キーテーブルをdb_constraint、提供Falseを表す解離、関連するデフォルトがTrueであることを示しています

##の配列:

  • これは、直列化だけを使用することができます
  • フィールド名は、外部キーフィールドでなければなりません
  • カスタムシーケンスアウトサイダーキーフィールドに関しては、カスタム直列フィールドは抗シリアライズに関与していない、と私たちはストレージに置くことができないので、子供は、外部キー名を直列化されなければなりません
  • 外部キー関連のデータは、明確にする必要が冗長ですmany=True
  • 一方向動作のシーケンス、サブシーケンスの種類が先頭に書き込まなければならないように、それが配列の逆方向を生成することができないため
from rest_framework import serializers
from . import models


class BookModelSerializers(serializers.ModelSerializer):
    class Meta:
        model = models.Book
        fields = '__all__'


class PublishModelSerializers(serializers.ModelSerializer):
    books = BookModelSerializers(many=True)
    class Meta:
        model = models.Publish
        # fields = '__all__'
        fields = ['name', 'address', 'books']

おすすめ

転載: www.cnblogs.com/setcreed/p/12104906.html