0

ここに私のフォームのコードがあります:

class ServiceChoiceForm(forms.ModelForm):

    def activated_services(self):
    """
        get the activated services added from the administrator
    """
    all_datas = ()
    data = ()

        services = ServicesActivated.objects.filter(status=1)
        for class_name in services:
            data = (class_name, class_name.name.rsplit('Service', 1)[1])
            all_datas = (data,) + all_datas
        return all_datas


class ProviderForm(ServiceChoiceForm):

    provider = forms.ChoiceField()
    def __init__(self, *args, **kwargs):
        super(ProviderForm, self).__init__(*args, **kwargs)
        self.fields['provider'].choices = self.activated_services()                

    class Meta:
        model = TriggerService
        fields = ('provider', )


class ConsummerForm(ServiceChoiceForm):

    consummer = forms.ChoiceField()

    class Meta:
        model = TriggerService
        fields = ('consummer', )

ステップ 0 で、上記のように myviews.pyを使用してデータをロードし、ステップ 2 で次のコードを使用して my にデータをロードし、ステップ0 で使用する値でデータをフィルタリングしようとします。get_form()ProviderFormChoiceField

def get_form(self, step=None, data=None, files=None):
    if step == '2':
        data = self.get_cleaned_data_for_step('0')
        consummer = ServicesActivated.objects.filter(status=1)
        consummer = consummer.exclude(name__exact=data['provider'])
        form = ConsummerForm(instance=consummer)

しかし、アクセスするConsummerFormとエラーが発生します:

'QuerySet' object has no attribute '_meta'

そして、Djangoの場合、複数のモデルを処理しようとしているようです

では、choicefield consumer のデータをフィルタリングするにはどうすればよいですか?

4

1 に答える 1

1
consummer = ServicesActivated.objects.filter(status=1)
consummer = consummer.exclude(name__exact=data['provider'])
form = ConsummerForm(instance=consummer)

モデル インスタンスの代わりにフォームに QuerySet を渡しています: https://docs.djangoproject.com/en/1.5/topics/forms/modelforms/

于 2013-10-12T16:23:24.850 に答える