ID に基づいてレコードのタイトルとスラブを作成する一般的な方法は何ですか? ここでdjango-photologueを使用しています。PK に基づいてタイトルとスラッグを付けてレコードを保存したい。一般的な問題は、レコードがデータベースに保存されるまで PK を取得できないことです。逆に、タイトルとスラッグがないと保存できません。
その種の問題の一般的な解決策は何ですか?
ID に基づいてレコードのタイトルとスラブを作成する一般的な方法は何ですか? ここでdjango-photologueを使用しています。PK に基づいてタイトルとスラッグを付けてレコードを保存したい。一般的な問題は、レコードがデータベースに保存されるまで PK を取得できないことです。逆に、タイトルとスラッグがないと保存できません。
その種の問題の一般的な解決策は何ですか?
通常、主キーはまったく使用しません。あなたの懸念が一意のスラッグを自動的に生成することだけである場合(これが、あなたがやろうとしていることを実行する唯一の理由です)、AutoSlugField
スラッグに追加された番号を増やして一意のスラッグを作成する が必要です。ユニークです。
django-command-extensions のAutoSlugField
一部である実装があります。
URI が次のように見える場合は、使用時にこれらの URI を生成し"example.com/${obj.id}-${sluggify( obj.title )}"
ます。この uri には、DB にまだ存在しないデータは含まれていないため、再度追加しないでください。slug の唯一の目的は、URL を人や検索エンジンに見やすくすることです。
例として Stackoverflow を取り上げます: PK ID に基づくタイトル/スラッグの作成
スラッグのみで選択する場合は、一意で不変の主キーである必要があります。id
通常の列である別の PK は必要ないことに注意してください。
ナメクジが悪いとは言いませんし、ナメクジを保存することが常に悪いとは言いません。それらをデータベースに保存する正当な理由はたくさんありますが、その場合は何をしているのかを考える必要があります。
一方、PK でデータを選択する (およびスラッグを無視する) 場合は、何も考える必要がないため、デフォルトの方法である必要があります。
レコードIDに基づいてファイルに名前を付けるには、いくつかのオプションがあります。
a)IDを予測してみてください:
max_pk = self.__class__.objects.aggregate(max_pk=Max('pk'))['max_pk'] or 0
predicted_id = max_pk+1
b)IDがわかっている場合は、post_saveのファイルの名前を変更します。
一意のファイル名を生成するために、md5ハッシュまたはランダム文字列を使用することもできます。
ところで、別のdjango-autoslugアプリがあります。