2011-06-26 11 views
0

この例とは別に、これを行う人の一例を見つけることができません。コードがどこに座る必要があるかを知る以外には役に立ちません。django admin - フィールドを呼び出し可能にする

How to prepopulate UserProfile fields in the Django admin?

その明白ではない、イムがログインしているユーザーに属する利用できる企業とドロップダウンを移入するには、adminセクションにしようとした場合ので、これは私のコード

class QuoteMaterial(models.Model): 
    name = models.CharField(_('name'), max_length=255) 
    content = models.TextField(_('content'), 
          help_text=_('A static priced item used when doing a job. Selectable when creating a quote. ')) 
    price = models.DecimalField(_('price'), max_digits=6, help_text="not sure if this is before or after VAT yet", decimal_places=2, default="0.00") 

    def get_companies(): 
     return CompanyProfile.objects.filter(user=request.user) 

    company = models.ForeignKey(CompanyProfile, default=get_companies) 

です。

私の問題は、「get_companies」にリクエストオブジェクトを渡す方法がわかりません。誰もが例を知っている。

答えて

2

あなたはModelAdminを拡張し、あなたの管理者クラスでは、ないmodels.Modelを拡張するクラスで、このオーバーライドを行う必要があります。具体的には、formfield_for_foreignkeyを上書きする必要があります。 the docsから

if db_field.name == "company": 
    kwargs['queryset'] = request.user.company_set.all() 
+0

https://docs.djangoproject.com/en/dev/ref/models/fields/#:あなたのケースのために

class MyModelAdmin(admin.ModelAdmin): def formfield_for_foreignkey(self, db_field, request, **kwargs): if db_field.name == "car": kwargs["queryset"] = Car.objects.filter(owner=request.user) return super(MyModelAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs) 

、それは次のように思われますデフォルト – bytejunkie

+0

フィールドの既定値が既存のモデルフィールドでない場合はわかりません。たとえそれがあっても、クエリーセットだけでなく、フィールドオブジェクトを返す必要があります。このアプローチのもう1つの問題は、あなたが正しく指摘したように、モデルの中でどのようにリクエストを得るかです。 –

+0

失礼なコメントをお詫びします。タイムアウトして編集しました。私はそれを入力した後に離れました。 私は今私が望むことができないことを知っている、私はこのサイトのフロントエンドを構築しようとしている、私はそれはユーザーが他の人々の会社の名前を見ることができることを意味すると思います。私が推測する即時の問題ではありません。 – bytejunkie

0

あなたは用語を混ぜています。

"事前充填"は、別のフィールドのフィールドを記入することを意味します。実際にフィールドを設定するのではなく、単に選択肢を制限してユーザーがそれらのフィールドを設定できるようにしているので、管理ポップアップのものをフィルタリングする方法ではありません。

さらに、フィールドの値はdefaultである必要があります。これは、データベースに渡され、デフォルトを設定するクエリを使用できないためです。あなた本当にがあなたのForeignKeyためlimit_choices_todocs)パラメータのようなものですが、それでも、あなたはこのためrequestを使用することはできません欲しい

。モデルのフィールドを使用して作業する必要があります。この理由は、ユーザーに基づいている場合、一部のユーザーは別のユーザーが設定した現在の値を選択できなくなるためです。 userがフィルタ内に現在のcompanyを生成していないなどの理由で、contentを変更するだけの場合には、companyは自分自身を変更する必要はありません。

関連する問題