Python 清除功能未运行

Python 清除功能未运行,python,django,admin,formset,Python,Django,Admin,Formset,我最近一直在使用Django 1.6.0和Python 3.2.5,在设置管理界面时遇到了一个问题。 基本上,我将编写一个应用程序,比如说,我将销售客户可以选择语言的产品。 目前,只有两种语言可用,但可能还有更多 因此,我创建了一个名为Language的模型和另一个名为Settings的模型,其中一个字段是active languages M2M Language 当然,我有一个名为Product的模型,其中包含有关产品的基本信息,还有一个名为SpecificProductInfo的模型,其中包

我最近一直在使用Django 1.6.0和Python 3.2.5,在设置管理界面时遇到了一个问题。 基本上,我将编写一个应用程序,比如说,我将销售客户可以选择语言的产品。 目前,只有两种语言可用,但可能还有更多

因此,我创建了一个名为Language的模型和另一个名为Settings的模型,其中一个字段是active languages M2M Language

当然,我有一个名为Product的模型,其中包含有关产品的基本信息,还有一个名为SpecificProductInfo的模型,其中包含指向产品的pk、指向语言的pk以及给定语言中的其他信息

现在,每当超级用户想要创建新产品时,都会有一个表单集,其中包含每种语言的特定信息。当然,对于与一种语言对应的每种形式,该语言都不能被修改。我是这样做的:

管理员

class SpecificProductForm(forms.ModelForm):

    class Meta:
        model = SpecificProduct
        fields = ['language','name'] #language and name of the product in the given language

    def clean(self):
        cleaned_data  = super(SpecificProductForm, self).clean()
        c_language = Language.objects.get(name=cleaned_data.get('language'))
        cleaned_data['language'] = c_language

        return cleaned_data

class SpecificProductInfoFormSet(BaseInlineFormSet):
    form = SpecificProductInfoForm
    model = SpecificProductInfo

    def __init__(self, *args, **kwargs):
        super(SpecificProductInfoFormSet, self).__init__(*args, **kwargs)   

        choices = []
        final_choices = [] #the Language choiceField will only contain 1 choice, so that the user can't edit the box
        for lang in Settings.objects.get(pk=1).active_languages.all():
            choices.append((lang.pk, lang.name,))

        i = 0

        for form in self.forms:
            final_choices = []
            final_choices.append(choices[i])
            form.fields['language'] = forms.ChoiceField(choices=final_choices)
            i+=1

    def clean(self):
        for form in self.forms:
            form.cleaned_data  = form.clean()
            form.cleaned_data['language'] = Language.objects.get(name=cleaned_data.get('language'))


class SpecificProductInline(admin.StackedInline):
    model     = SpecificProduct
    formset    = SpecificProductFormSet

    settings = Settings.objects.get(pk=1).active_languages.all() 
    extra = len(site_settings)
    max_num = extra

    def has_delete_permission(self, request, obj=None):
        return False


class ProductAdmin(admin.ModelAdmin):
    list_display   = ...

    inlines = [SpecificProductInline,]

    def save_model(self, request, obj, form, change): 
        instance = form.save(commit=False)
        if not hasattr(instance,'node_creator'):
            instance.creator = request.user
        instance.modifier = request.user
        instance.save()
        form.save_m2m()
        return instance


admin.site.register(Product,ProductAdmin)
当我想要添加一个产品时,我想要的所有东西都会出现在界面上。但是,每当我单击“保存”按钮时,就会出现“ValueError”错误,指定“language”字段必须是语言模型而不是数字。 显然,没有调用clean函数。为了证明这一点,我在clean函数之后的表单和表单集定义中添加了一个“raiseexception”。但没有提出任何例外。你知道会发生什么事吗? 多谢各位


PS:起初,我没有使用表单集,只是一个表单,我只有一种语言,它工作得很好。clean函数被称为

@ishez绝对不是。代码审查仅适用于工作代码。StackOverflow完全适合在非工作代码方面寻求帮助。@DanielRoseman哦,好的。谢谢你让我知道这一点。