I’m trying to iterate through a form’s fields and check the type of field each one is. I want to implement special handling for ModelChoiceField. So this is basically what I’m using:
models.py:
from django.db import models
class MyInfo(models.Model):
TypeID = models.IntegerField()
SomeTextInfo = models.TextField()
OtherTextInfo = models.TextField()
BooleanInfo = models.BooleanField()
class MyTypes(models.Model):
MyTypeName = models.CharField(max_length = 100)
def __unicode__(self):
return self.MyTypeName
forms.py:
from django import forms
from MyProject.models import MyInfo
from MyProject.models import MyTypes
class MyForm(forms.Form):
ID = forms.CharField(widget = forms.HiddenInput())
TypeID = forms.ModelChoiceField(queryset=MyTypes.objects.all(),empty_label="(Unknown)")
SomeTextInfo = forms.CharField()
OtherTextInfo = forms.CharField()
BooleanInfo = forms.RadioSelect()
views.py:
from django.shortcuts import render_to_response
from django.http import HttpResponseRedirect
from django.contrib import auth
from django.core.context_processors import csrf
from django.template import RequestContext
from django.contrib.auth.models import User
from django import forms
from MyProject.models import MyInfo
from MyProject.models import MyTypes
def whatever(request):
if request.method == "POST":
my_form = MyForm(request.POST)
if my_form.is_valid():
q = MyInfo()
for each in my_form:
#!!!!!!-----THIS RIGHT HERE IS NOT WORKING NO MATTER WHAT I TRY----!!!!!!
#if isinstance(each, forms.ModelChoiceField)
if type(each) is forms.ModelChoiceField:
#import sys
#sys.exit("Error message")
Value_Needed = my_form.cleaned_data[each.name].pk
setattr(q, each.name, Value_Needed)
else:
Value_Needed = my_form.cleaned_data[each.name]
setattr(q, each.name, Value_Needed)
q.save()
else:
#just render the form because it hasn't been submitted yet......
Unfortunately this not working. I know this because if I try un-commenting the “sys.exit” command in the “If” section where I’m doing the respective handling, it never gets hit. So its always executing whats in the “else” section. And whats more, when it gets there, I keep getting an error message that says "int() argument must be a string or a number, not ‘MyTypes’.
I’m stumped and have tried every variance I can think of to detect all ModelChoiceField types, but just can’t seem to figure this out. Anyone have any suggestions?
(And one more thing: please don’t tell me I should be using “ModelMultupleChoiceField” because thats not what I’m using)