Python 清除功能未运行
我最近一直在使用Django 1.6.0和Python 3.2.5,在设置管理界面时遇到了一个问题。 基本上,我将编写一个应用程序,比如说,我将销售客户可以选择语言的产品。 目前,只有两种语言可用,但可能还有更多 因此,我创建了一个名为Language的模型和另一个名为Settings的模型,其中一个字段是active languages M2M Language 当然,我有一个名为Product的模型,其中包含有关产品的基本信息,还有一个名为SpecificProductInfo的模型,其中包含指向产品的pk、指向语言的pk以及给定语言中的其他信息 现在,每当超级用户想要创建新产品时,都会有一个表单集,其中包含每种语言的特定信息。当然,对于与一种语言对应的每种形式,该语言都不能被修改。我是这样做的: 管理员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的模型,其中包
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哦,好的。谢谢你让我知道这一点。