私たちmodel
にはname
とslug
フィールドがあります。これは次のようになります。
class MyModel(CommonInfo, SafeDeleteModel):
name = models.CharField(_('Name'), max_length=255, null=True, blank=True)
slug = AutoSlugField(_('Url'), populate_from='name', unique=True,)
フィールドについては、保存slug
されるたびに一意のスラッグを生成します。model
また、Django Safe Delete
ライブラリを使用してソフト削除しますmodel
:
つまり、たとえば、model
「My Model」という名前で新しいインスタンスを作成するslug
と、「/my-model」のような が自動生成されます。
slug
ここで、 「/my-model」を使用してこのインスタンスを「ソフト削除」するとします。私たちのデータベースには、が削除されdeleted
た日付を含むプロパティがあります。model
これはアプリケーションには表示されません。完全に無視されます (論理的に削除されているため、問題ありません)。
問題は、次に同じ名前の "My Model" で別のものを作成するときに、同じ名前のスラッグ (論理的に削除された) が既に存在することを考慮せずに、"/my-model" スラッグを再び自動生成することです。ナメクジ。「/my-model-1」などの一意のものが必要です。
autoslug
とsafe-delete
ライブラリの間の接続が失われています。どういうわけか、autoslug
ソフト削除されたものがある可能性があることを知り、一意のものを生成するときにそれらを考慮する必要がありますslug.
私たちは Django / Python の初心者であることを考慮してください。
これが機能しない場合、回避策としてslug
2 つのフィールド (名前と ID) を使用して生成します。slug
"/my-model/12345" のようなが生成され、id
は一意であるため、常に一意になります。