次のモデルがあります。Djangoカスタムマネージャのキーワード引数
class Site(models.Model):
domain = models.CharField(max_length=255, blank=True)
subdomain = models.CharField(max_length=255, blank=True)
サイトにサブドメインがない場合は、デフォルトでwww
にします。これは簡単に行うことができます。しかし、Site.objects.get(domain='example.com')
をサブドメインなしで呼び出すと、サブドメインをwww
に設定したいと考えています。私はこのような何かやってみました
:
class SitesManager(models.Manager):
def get_queryset(self, *args, **kwargs):
if 'domain' in kwargs.keys() and 'subdomain' not in kwargs.keys():
kwargs['subdomain'] = 'www'
qs = super(SitesManager, self).get_queryset(args, kwargs)
return qs
class Site(models.Model):
domain = models.CharField(max_length=255, blank=True)
subdomain = models.CharField(max_length=255, blank=True)
objects = SitesManager()
どうやらget_queryset
は、追加の引数を取りません。どのようなメソッドをオーバーライドする必要がありますか?
EDIT:
目標は、同じドメインやサブドメインを有する唯一つのサイトを持つことです。ただし、ドメインが同じでサブドメインが異なる複数のサイトがある場合もあれば、その逆の場合もあります。したがって、ドメインまたはサブドメインを一意にすることはできませんが、これはsaveメソッドで処理するのは簡単で、各ドメインのサブドメインの組み合わせが一意です。
我々は望ましい結果ではない2つの異なるサイトが得られているリンクhttp://example.com
とhttp://www.example.com
を解析することによってサイトを追加しようとしたとき、私はだったに走った問題。だから私の解決策は、ちょうど空のサブドメインをwww
にデフォルト設定することでした。
問題は、後でhttp://example.com
を解析してサイトが存在するかどうかを確認しようとすると、それが返されないことになります。 @mad_wombatは、ユーザーが求めていないものを返すべきではないと言いますが、サブドメインが決して空にならない場合は、それが実際にはwww
であるはずです。私は、代わりに電話を受けるか、カスタムメソッドを行う前に衛生検査を行うことができると思う。ちょうど私がget()
呼び出しをこのインスタンスで想定されている方法で動作させるのではなく新しいものを追加しているようだ。
より一般的に言えば、データベースフィールドにデフォルト値がある場合、そのフィールドに空の値を固定することはできません。したがって、ユーザーが空の値を要求しないようにするのは理にかなっていません。そのフィールドに結果がないと伝えるよりも?
ちなみに、getメソッドをオーバーライドすべきかどうかにかかわらず、誰かが私にその方法を教えてもらえますか?あなたが "コーディングするべきではない"たくさんのことがあります。それは、それを知る価値がないということを意味するものではありません。そして、私がこれを投稿した元の理由から、私はどこでもその答えを見つけることができなかったため、それを望むかもしれない人に答えを与える価値があるでしょう。 –