このスレッドのフォローアップ: django: データベース オブジェクトの主キーから URL をハッシュするにはどうすればよいですか? 、主キーをユーザーから隠しDetailview
て、urlconf で使用したいと考えています。ほとんどの場合、ビット単位の XOR を使用してこの非表示を実現できました (ビュー関数で機能しました)。ただし、URL で送信されたマスクされた主キーを「マスク解除」する必要がある部分に到達するまで、DetailView
.
インスタンスに送信する前に、pk_masked 名前付きグループを「マスク解除」するにはどうすればよいDetailViewFilteredOnUser(DetailView)
ですか? mask_toggle(pk_unmasked)
urlconf で DetailViewFilteredOnUser への呼び出しを送信する方法はありますか? 解決策を探しているときpk_url_kward
に、Django のドキュメントで何かを見つけましたが、それを機能させることができませんでした。とにかく、DetailView が動作する主キーで操作を実行するのに役立つとは思いません。
ここに私のマスキング機能があります:
def mask_toggle(number_to_mask_or_unmask):
return int(number_to_mask_or_unmask) ^ settings.MASKING_KEY
私のモデルは、「アイテム」を含む「パッケージ」です。
class Pkg(models.Model):
user = models.ForeignKey(User, editable=False)
tracking_number = models.CharField(max_length=60, unique=True)
class Item(models.Model):
pkg = models.ForeignKey(Pkg)
description = models.CharField(max_length=300)
これが私のurls.pyにあるものです:
class ListViewFilteredOnUser(ListView):
def get_queryset(self):
return Pkg.objects.order_by('-created_at').filter(user=self.request.user)
class DetailViewFilteredOnUser(DetailView):
def get_queryset(self):
qs = super(DetailViewFilteredOnUser, self).get_queryset()
return qs.filter(user=self.request.user)
....
url(r'^(?P<pk_masked>\d+)/$',
login_required(DetailViewFilteredOnUser.as_view( model=Pkg,
template_name='pkgs/detail.html'
)),
name='detail'),
したがって、問題は、urlconf の名前付きグループが「pk」の場合、マスクされた主キー (マスクされたキーが URL にあるため) が DetailView に送信されることです。urlconf の名前付きグループが「pk_masked」の場合、どこかで行う必要があり、pk=mask_toggle(pk_masked)
どこでどのように行うかわかりません。ありがとう。