Ok...I've gotten this working a different way, in case anyone is
interested, I thought I'd post it here (although parent_company is
currently not saving for some reason..anyone?)
Here is my model code...again..notice that the Company has a related
Address.
class Address(models.Model):
address_id = models.AutoField(primary_key=True)
street_number = models.IntegerField(null=True, blank=True)
street_name = models.CharField(blank=True, maxlength=135)
street_suffix = models.TextField(blank=True)
city = models.CharField(blank=True, maxlength=135)
county = models.CharField(blank=True, maxlength=135)
state = models.CharField(blank=True, maxlength=60)
country = models.CharField(blank=True, maxlength=135)
zip = models.CharField(blank=True, maxlength=30)
update_user = models.ForeignKey(UserInfo)
#models.IntegerField(null=True, blank=True)
time_stamp = models.DateTimeField()
class Meta:
db_table = 'address'
class Company(models.Model):
company_id = models.AutoField(primary_key=True)
parent_company = models.ForeignKey("self",unique=True,null=True)
address = models.ForeignKey(Address,unique=True
company_name = models.CharField(blank=True, maxlength=150)
company_description = models.CharField(blank=True, maxlength=300)
update_user =
models.ForeignKey(UserInfo)#models.IntegerField(null=True, blank=True)
time_stamp = models.DateTimeField()
def __str__(self):
return self.company_name
class Meta:
db_table = 'company'
Ok..now my view code..I've subclassed changemanipulator
class CustomCompanyChangeManipulator(Company.ChangeManipulator):
def __init__(self,company_id):
all_companies = Company.objects.all()
Company.ChangeManipulator.__init__(self,company_id)
self.original_object =
Company.objects.get(company_id=company_id)
allcomp = ()
if all_companies:
allcomp = [(obj.company_id, obj.company_name) for obj in
all_companies]
noneobj = ('','')
allcomp.insert(0,noneobj)
self.fields = (
forms.SelectField(field_name="parent_company_id",
is_required=False,choices=allcomp),
forms.TextField(field_name="company_name", length=20,
is_required=True),
forms.TextField(field_name="company_description",
maxlength=255, length=30,is_required=True),
forms.SelectField(field_name="street_prefix",
is_required=False,choices=STREET_PREFIX),
forms.IntegerField(field_name="street_number"),
forms.TextField(field_name="street_name", length=30,
maxlength=45),
forms.SelectField(field_name="street_type",
is_required=False,choices=STREET_TYPE),
forms.TextField(field_name="city", length=30,
maxlength=45),
forms.SelectField(field_name="state",
is_required=True,choices=STATES),
forms.TextField(field_name="zip",is_required=True),
forms.CheckboxField(field_name="createoffice",
is_required=False),
)
def flatten_data(self):
origcompany = self.original_object
fields = dict([(field.name, getattr(origcompany,
field.attname)) for field in self.original_object._meta.fields])
for field in origcompany.address._meta.fields:
fields[field.name] = getattr(origcompany.address,
field.attname)
return fields
def save(self, new_data):
origcompany = self.original_object
origcompany.company_name = new_data['company_name']
origcompany.company_description =
new_data['company_description']
origcompany.parent_company = new_data['parent_company_id']
origcompany.save()
origaddress = origcompany.address
origaddress.street_prefix = new_data['street_prefix']
origaddress.street_number = new_data['street_number']
origaddress.street_name = new_data['street_name']
origaddress.street_type = new_data['street_type']
origaddress.city = new_data['city']
origaddress.state = new_data['state']
origaddress.zip = new_data['zip']
Here is where I actually call the code to render the form...
def rendereditcompany(request,company_id):
current_user = request.session.get('CurrentUser')
if not current_user:
return HttpResponseRedirect('/rsswww/login')
nonfields = {'time_stamp': False,'address':True }
manipulator = CustomCompanyChangeManipulator(company_id)
company = manipulator.original_object
if request.POST:
# If data was POSTed, we're trying to create a new Place.
new_data = request.POST.copy()
# Check for errors.
errors = manipulator.get_validation_errors(new_data)
if not errors:
manipulator.do_html2python(new_data)
manipulator.save(new_data)
return HttpResponseRedirect('/rsswww/companyadmin')
else:
print "errors"
print manipulator.get_validation_errors(new_data)
form = forms.FormWrapper(manipulator, new_data, errors)
return render_to_response('editcompany.html', {'form':
form})
else:
# No POST, so we want a brand new form without any data or
errors.
errors = new_data = {}
new_data = manipulator.flatten_data()
# Create the FormWrapper, template, context, response.
form = forms.FormWrapper(manipulator, new_data, errors)
return render_to_response('editcompany.html', {'form': form,
'Company':company})
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Django users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---