1. ホーム
  2. ジャンゴ

django のデータモデルで on_delete を使用する

2022-03-02 16:44:47
<パス

I. 外部キーの削除

について on_delete の概要は以下の通りです。

  • 1. 共通使用法(に設定 null )

    class BookModel(models:)
        """
        Book table
        """
        book_name = models.CharField(max_length=100, verbose_name='book_name')
        # indicates that the foreign key is associated with the author table, when the author table is deleted, the book table is not deleted, but only the foreign key is left empty
        foreignKey(AuthModel, null=True, blank=True, on_delete=models.SET_NULL)
        FloatField(verbose_name='price')
        create_time = models.DateTimeField(auto_now_add=True, verbose_name='add time')
    
    
    
    
  • 2. その他の属性について

    • CASCADE :これはデフォルトのオプションであるcascade deleteであり、明示的に指定する必要はありません。
    • PROTECT : プロテクトモードでは、このオプションを使用すると、削除時に ProtectedError というエラーが発生します。
    • SET_NULL : Null モードでは、外部キーフィールドは削除されると NULL に設定されます。 blank=True, null=True フィールドが定義されているときは、空であることが許容されます。
    • SET_DEFAULT : デフォルト値の設定、削除すると外部キーフィールドはデフォルト値に設定されるので、外部キー定義時にデフォルト値を追加するように注意してください。
    • SET() : 値をカスタマイズする。もちろん、対応するエンティティでなければならない。
  • 3. その他の注意事項:About SET() の使用について

    **Official example**
    def get_sentinel_user():
        return get_user_model().objects.get_or_create(username='deleted')[0]
    
    class MyModel(models.Model):
        user = models.ForeignKey(
            settings.AUTH_USER_MODEL,
            on_delete=models.SET(get_sentinel_user),
        )