0

私は次のモデルを持っています:

class MyModel(models.Model):
    myField = models.CharField()
    myOtherField = models.CharField()

    def __init__(self,*args,**kwargs):            
        super(MyModel,self).__init__(*args, **kwargs)
        self._meta.get_field_by_name("myField")[0].default = get_default_value()
        self._meta.get_field_by_name("myOtherField")[0]._choices = get_choices()

def get_default_value():
    # obviously, this does more than just return a static value; 
    # how I actually get the default value for this field isn't relevant for this question
    return "my default value"

def get_choices():
    # as above, how this works is irrelevant
    return [("one","one"),("two","two")]

class MyForm(forms.ModelForm):
    class Meta:
        model = MyModel


MyFormFactory = modelform_factory(MyModel)

def MyView(request):
    model = MyModel()
    form1 = MyForm(instance=model)
    form2 = MyFormFactory(instance=model)
    return render_to_response('my_template.html',{'form1':form1, 'form2':form2})

form1は適切にレンダリングされ、myFieldとmyOtherFieldのデフォルト値は適切な選択でSelectとしてレンダリングされます。ただし、form2には2つの空白のTextInputフィールドがあります。modelform_factoryメソッドから生成されたフォームがこれらの属性を尊重するようにする方法はありますか?

4

1 に答える 1

0

各オブジェクトの一連の編集フォームを見たい場合は、生成されたファクトリを使用するときに queryset パラメータを設定する必要があると思います。デフォルトの動作では、すべてのオブジェクトと空のフォームが表示されます。

def MyView(request):
    ...
    form2 = MyFormFactory(instance=model, queryset=MyModel.objects.all())

このリンクが役立つ場合があります。

これを一粒の塩で取ってください。これは、Python をいじる最初の日です。

于 2013-04-09T08:51:04.393 に答える