djangoはm2mの関係が本当に必要ですか?

CosmicReindeer

だから私はこのような2つのモデルを持っています。

class Channel(BaseModel):
    class Meta:
        verbose_name = 'channel'
        verbose_name_plural = 'channels'
        indexes = [
            models.Index(fields=['box', 'name'], name='channel_box_name_idx'),
        ]

    def __str__(self):
        return self.name

    def get_next_position(self):
        aggregate = self.box.channels.aggregate(models.Max('position'))
        return (aggregate['position__max'] or -1) + 1

    def save(self, *args, **kwargs):
        if self._state.adding:
            # we insert the object's position if
            # it hasn't been created yet. We need to do
            # this explicitly because django doesn't
            # allow more than one auto-field
            self.position = self.get_next_position()
            super(Channel, self).save(*args, **kwargs)
            return self.box.channels.add(self)
        super(Channel, self).save(*args, **kwargs)

    objects = models.Manager()
    name = models.CharField(max_length=100, validators=[MinLengthValidator(2)])
    box = models.ForeignKey('api_backend.Box', on_delete=models.CASCADE)
    position = models.PositiveSmallIntegerField(db_index=True)

    REQUIRED_FIELDS = [name, box]

class Box(BaseModel):
    class Meta:
        verbose_name = 'box'
        verbose_name_plural = 'boxes'
        indexes = [
            models.Index(fields=['owner'], name='box_owner_idx'),
            models.Index(fields=['owner', 'name'], name='box_name_owner_idx'),
        ]

    def __str__(self):
        return self.name

    objects = models.Manager()
    icon = models.ImageField(upload_to='icons/', storage=DefaultStorage)
    name = models.CharField(max_length=100, validators=[MinLengthValidator(2)])
    owner = models.ForeignKey('api_backend.User', on_delete=models.CASCADE)
    channels = models.ManyToManyField('api_backend.Channel', related_name='box_channels')

    REQUIRED_FIELDS = [name, owner]

チャネルには属性がありますboxそして、ボックスにはm2mフィールドがありますchannelsしたがって、このタイプの関係では、ボックスを使用してチャネルを作成するたびに、ボックスのm2mフィールドに同じものを追加する必要がありますchannelsこのようなものは本当に必要ですか?m2mフィールド用に追加のテーブルが必要なように、channelsそれがなくても、次のようにして同じテーブルにアクセスできます。box.channel_set

では、パフォーマンスに変化はありますか?モデルの構造を変更する必要がありますか?誰か助けてくれませんか?

イアン・シェルビントン

チャネルに複数のボックスを含めることはできますか?はいの場合、aManyToManyFieldが適切であり、ForeignKey削除する必要があります

関連するものが1つしかManyToManyFieldないため、aChannel不要な場合BoxManyToManyFieldを削除し、関連するアクセサーchannel_setを使用する必要があります。

代わりにBox名前が付けられインスタンスに属性を設定したい場合は、に提供できる関連するにアクセスするために使用できますchannelschannel_setChannelrelated_nameForeignKey

class Channel(BaseModel):
    ...
    box = models.ForeignKey('api_backend.Box', on_delete=models.CASCADE, related_name='channels')
    ...

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Django:m2mの関係により、1行ではなく2行が作成されます

分類Dev

すべてのm2m関係のDjangoループ

分類Dev

Djangoでm2m関係のオブジェクトを変更する

分類Dev

Sonata Adminでm2m関係を構成するにはどうすればよいですか?

分類Dev

DjangoのM2M関係にないモデルからオブジェクトを取得する

分類Dev

Djangoはループなしで複数のm2m関係を削除します

分類Dev

2つのモデル間の1つの特定のM2M関係を削除するにはどうすればよいですか?

分類Dev

中間テーブルを使用して、テンプレートにm2mの関係を表示するにはどうすればよいですか?

分類Dev

Djangoでモデル継承を使用したM2M関係の保存後のシグナルを処理するにはどうすればよいですか?

分類Dev

DjangoManyToManyFieldがm2mの関係を保存しない

分類Dev

M2M関係を必須フィールドにするにはどうすればよいですか?

分類Dev

PowerPivotでm2m関係を作成する方法

分類Dev

Django:関係v2を介したm2mのprefetch_related()

分類Dev

M2MとFKの関係を持つDjangoモデルの正確な複製を作成する方法

分類Dev

Django多対多(m2m)同じモデルとの関係

分類Dev

DjangoユーザーテーブルとのM2M関係を作成する方法

分類Dev

現在、angular2を使用するには280の依存関係が必要ですか?

分類Dev

commit=FalseでDjangoにm2mフィールドを保存するには?

分類Dev

m2m関係からユーザーを取得するためにクエリを実行する方法

分類Dev

Djangoのm2mフィールドの値の出現を確認するにはどうすればよいですか?

分類Dev

angle2クイックスタートで推奨されているすべての依存関係は本当に必要ですか?

分類Dev

既存のm2mフィールドのカスタム保存メソッドを作成するにはどうすればよいですか。(Django)

分類Dev

Apache2 は本当に必要ですか?

分類Dev

Djangoは、m2mからモデルまでのフィールドごとにクエリセットに注釈を付けます

分類Dev

IoTのM2M通信に使用できるプロトコルはどれですか?

分類Dev

条件変数には本当に別の変数が必要ですか?

分類Dev

Pebbleではexit()のfree()メモリが本当に必要ですか?

分類Dev

新しく作成されたインスタンスのsaveメソッドでm2m関係にアクセスします

分類Dev

Django M2Mの関係:中間テーブルを1つだけ使用しますか、それともエンティティペアごとに1つ使用しますか?

Related 関連記事

  1. 1

    Django:m2mの関係により、1行ではなく2行が作成されます

  2. 2

    すべてのm2m関係のDjangoループ

  3. 3

    Djangoでm2m関係のオブジェクトを変更する

  4. 4

    Sonata Adminでm2m関係を構成するにはどうすればよいですか?

  5. 5

    DjangoのM2M関係にないモデルからオブジェクトを取得する

  6. 6

    Djangoはループなしで複数のm2m関係を削除します

  7. 7

    2つのモデル間の1つの特定のM2M関係を削除するにはどうすればよいですか?

  8. 8

    中間テーブルを使用して、テンプレートにm2mの関係を表示するにはどうすればよいですか?

  9. 9

    Djangoでモデル継承を使用したM2M関係の保存後のシグナルを処理するにはどうすればよいですか?

  10. 10

    DjangoManyToManyFieldがm2mの関係を保存しない

  11. 11

    M2M関係を必須フィールドにするにはどうすればよいですか?

  12. 12

    PowerPivotでm2m関係を作成する方法

  13. 13

    Django:関係v2を介したm2mのprefetch_related()

  14. 14

    M2MとFKの関係を持つDjangoモデルの正確な複製を作成する方法

  15. 15

    Django多対多(m2m)同じモデルとの関係

  16. 16

    DjangoユーザーテーブルとのM2M関係を作成する方法

  17. 17

    現在、angular2を使用するには280の依存関係が必要ですか?

  18. 18

    commit=FalseでDjangoにm2mフィールドを保存するには?

  19. 19

    m2m関係からユーザーを取得するためにクエリを実行する方法

  20. 20

    Djangoのm2mフィールドの値の出現を確認するにはどうすればよいですか?

  21. 21

    angle2クイックスタートで推奨されているすべての依存関係は本当に必要ですか?

  22. 22

    既存のm2mフィールドのカスタム保存メソッドを作成するにはどうすればよいですか。(Django)

  23. 23

    Apache2 は本当に必要ですか?

  24. 24

    Djangoは、m2mからモデルまでのフィールドごとにクエリセットに注釈を付けます

  25. 25

    IoTのM2M通信に使用できるプロトコルはどれですか?

  26. 26

    条件変数には本当に別の変数が必要ですか?

  27. 27

    Pebbleではexit()のfree()メモリが本当に必要ですか?

  28. 28

    新しく作成されたインスタンスのsaveメソッドでm2m関係にアクセスします

  29. 29

    Django M2Mの関係:中間テーブルを1つだけ使用しますか、それともエンティティペアごとに1つ使用しますか?

ホットタグ

アーカイブ