テンプレートから呼び出すことはできるが、モデル全体 (管理ビューなど) には影響せず、リクエストで設定されたパラメーター (user_profile) をリッスンするカスタム マネージャーを追加したいと考えています。
以下は私がこれまでに持っているものです:
models.py:
class CurrentQuerySet(models.query.QuerySet):
def current(self):
return self.filter(id=1) ## this simplified filter test works..
class CurrentManager(models.Manager):
use_for_related_fields = True
def get_query_set(self):
return CurrentQuerySet(self.model)
def current(self, *args, **kwargs):
return self.get_query_set().current(*args, **kwargs)
モデル B は次のように定義されます。
objects = CurrentManager()
テンプレートは次を呼び出します。
{% for b in a.b_set.current %}
しかし、そのフィルターにパラメーター (この場合はユーザー プロファイルに保存されている日付) を渡そうとするとすぐに、メソッドは結果を返しません。
例えば:
models.py
class CurrentQuerySet(models.query.QuerySet):
def current(self,my_date):
return self.filter(valid_from__lte=my_date)
showA.html
{% for b in a.b_set.current(request.user.get_profile.my_date) %}
テンプレートからパラメーターを渡す代わりに、これをview.pyに設定しようとしました
@login_required
def showA(request,a_id):
my_date = request.user.get_profile().my_date
a = A.objects.get(id=a_id)
t = loader.get_template('myapp/showA.html')
c = RequestContext(request,{'a':a,'my_date':my_date,})
return HttpResponse(t.render(c))
ここで欠落している (または誤解している) 部分はどれですか?
ありがとう
R
編集
モデルはこちら。前述のように、この例では単純な 1:n の関係ですが、他の場合には m:n の関係になることもあります。
class A(models.Model):
#objects = CurrentManager()
a = models.CharField(max_length=200)
description = models.TextField(null=True,blank=True)
valid_from = models.DateField('valid from')
valid_to = models.DateField('valid to',null=True,blank=True)
def __unicode__(self):
return self.a
class B(models.Model):
#objects = models.Manager()
objects = CurrentManager()
a = models.ForeignKey(A)
b = models.CharField(max_length=200)
screenshot = models.ManyToManyField("Screenshot",through="ScreenshotToB")
description = models.TextField(null=True,blank=True)
valid_from = models.DateField('valid from')
valid_to = models.DateField('valid to',null=True,blank=True)
def __unicode__(self):
return self.b
編集-2
受け入れられた回答は、少なくとも 1 つの関係で機能します。
よりネストされたデータ モデルの場合、この方法では期待どおりの結果が得られないようです。
models.py
class C(models.Model):
objects = CurrentManager()
b = models.ForeignKey(A)
c = models.CharField(max_length=200)
description = models.TextField(null=True,blank=True)
valid_from = models.DateField('valid from')
valid_to = models.DateField('valid to',null=True,blank=True)
def __unicode__(self):
return self.c
ビュー.py
@login_required
def showA(request,a_id):
a = A.objects.get(id=a_id)
my_date = request.user.get_profile().my_date
b_objects = a.b_set.current(my_date)
c_objects = b_objects.c_set.current(my_date)
t = loader.get_template('controltool2/showA.html')
c = RequestContext(request,{'a':a,'b_objects':b_objects,'c_objects':c_objects,})
return HttpResponse(t.render(c))
これはエラーを返します: 'QuerySet' object has no attribute 'c_set'
。