장고에 사용자가 범주 목록에서 선택할 수있는 ChoiceField가 포함 된 간단한 양식을 작성 중입니다. 확실히 처리 할 category_id를 전달하고 싶습니다. 이건 내 코드입니다 :Django ChoiceField 또는 TypedChoiceField 및 유효하지 않은 ID 선택
models.py :
class AddProductForm(forms.Form):
category = forms.ChoiceField(label=_('Category'))
product = forms.CharField(label=_('Product'), widget=forms.TextInput())
code = forms.CharField(label=_('Code'), widget=forms.TextInput())
price = forms.DecimalField(label=_('Price'))
는 이제 views.py에서 내가 선택을 작성
class Category(models.Model):
category = models.CharField(max_length=128)
def __unicode__(self):
return self.category
class Product(models.Model):
code = models.CharField(max_length=75)
name = models.CharField(max_length=128)
price = models.DecimalField(max_digits=7, decimal_places=2)
category = models.ForeignKey(Category)
def __unicode__(self):
return self.name
forms.py : 이제
def add_product_form(request):
form = AddProductForm()
form.fields['category'].choices =[(c.id, c.category) for c in Category.objects.all()]
return render_to_response('product-form.html', {'form':form})
양식을 제출할 때를 제외하고 모든 것이 괜찮은 것 같습니다. 카테고리의 ID에 대해 불평합니다. 그것은 말합니다 : 유효한 선택을 선택하십시오.
def add_product(request): if request.method == 'POST': form = AddProductForm(request.POST) if form.is_valid(): category = request.cleaned_data['category'] product = form.cleaned_data['product'] code = form.cleaned_data['code'] price = form.cleaned_data['price'] product = Product(code=code, name=product, price=price, category_id=category) product.save() return HttpResponseRedirect('/ms-admin/') else: form = AddProductForm() # more is required here to fill the choices again return render_to_response('product-form.html', {'form':form})
나는 TypedChoiceField와 같은 시도했지만 같은 잘못된 데이터를 가지고 : 1
이 내가 양식을 처리하고 어떻게 가능한 선택 중 하나가 아닙니다. 문자열과 int와 유니 코드 사이의 변환과 관련이 있다는 것을 알고 있습니다. 설명해 주시겠습니까?