1

私たちmodelにはnameslugフィールドがあります。これは次のようになります。

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:

Django 安全な削除

Django Autoslug

つまり、たとえば、model「My Model」という名前で新しいインスタンスを作成するslugと、「/my-model」のような が自動生成されます。

slugここで、 「/my-model」を使用してこのインスタンスを「ソフト削除」するとします。私たちのデータベースには、が削除されdeletedた日付を含むプロパティがあります。modelこれはアプリケーションには表示されません。完全に無視されます (論理的に削除されているため、問題ありません)。

問題は、次に同じ名前の "My Model" で別のものを作成するときに、同じ名前のスラッグ (論理的に削除された) が既に存在することを考慮せずに、"/my-model" スラッグを再び自動生成することです。ナメクジ。「/my-model-1」などの一意のものが必要です。

autoslugsafe-deleteライブラリの間の接続が失われています。どういうわけか、autoslugソフト削除されたものがある可能性があることを知り、一意のものを生成するときにそれらを考慮する必要がありますslug.

私たちは Django / Python の初心者であることを考慮してください。

これが機能しない場合、回避策としてslug2 つのフィールド (名前と ID) を使用して生成します。slug"/my-model/12345" のようなが生成され、idは一意であるため、常に一意になります。

4

1 に答える 1