0

重複の可能性:
django: 文字列を使用して特定のモデルを選択する

例: (Django、views.py)

def create(request, mod):  
    #mod is a modelname    
    if request.method == 'POST':  
        form = globals()[mod+"Form"](request.POST)  
        if form.is_valid():  
            new_file_num = form.save(commit=False)  
            >>>> if entry.objects.filter(fileTypeNumber=1).exists():  

私の問題はここにあります。

if entry.objects.filter( ....

代わりに、私はしたい:

mod = entry;  
if mod.objects.filter( ....  

ここでの全体的な目標は、フィールドが異なる複数のモデルに対して同じ「ビュー」を使用することです。これを行うより良い方法はありますか?ビューは基本的にファイル番号を割り当ててから保存しています。

前もって感謝します

4

2 に答える 2

0

インスタンスからクラスをプルします。

mod = my_instance.__class__
if mod.objects.filter(fileTypeNumber=1).exists():
于 2013-02-02T20:05:49.237 に答える
0

あなたはおそらく次のようなことをすることができます:

from models import Foo, Bar

def create_view(model):
    # model is the actual model class (not instance)
    def view(request):
        form = globals()[model.__name__ + "Form"]
        if model.objects.filter(fileTypeNumber=1).exists():
            pass
            # whatever you do with it
    return view

foo_view = create_view(Foo)
bar_view = create_view(Bar)

Fooこれにより、とモデルの 2 つのビューが作成されBarます。しかし、モデルごとに異なるフィールドがある場合 (または、別の方法で処理する必要があることを検証または実行している場合) は、この種の抽象的な作成を行うのではなく、各モデルに対して手動で異なるビューを作成する方がよい場合があります。関数。

于 2013-02-02T20:09:32.937 に答える