On 6/27/07, leif <[EMAIL PROTECTED]> wrote:
...
> Thanks for the input, Jeremy. I've actually decided to use newforms-
> admin since I won't be going to production for another few months
Sorry for missing that the first time. :)
Admin uses django.newforms.models.form_for_model, which takes an
optional formfield_callback in order to map between DB fields and form
fields.
In order to supply that parameter, it looks like you'll need to
inherit from django.contrib.admin.options.ModelAdmin and override
formfield_for_dbfield. That method maps between database fields and
form fields.
Have formfield_for_dbfield return your custom field class (a subclass
of django.newforms.fields.Field; CharField might make sense), then
override the Field.clean method to do your FK lookup and raise a
ValidationError if it's not a valid zip code.
NB: I haven't used newforms much myself yet. Please report back if
you run into any troubles. :)
You'll end up with something like this:
----
class MyAdmin(ModelAdmin):
def formfield_for_dbfield(self, db_field, **kwargs):
if isinstance(db_field, models.ForeignKey) and db_field.name ==
'zip_code':
return ZipCodeField(**kwargs)
else:
super(MyAdmin, self).formfield_for_dbfield(db_field, **kwargs)
---
class ZipCodeField(CharField):
def __init__(self, *args, **kwargs):
self.max_length, self.min_length = 5, 5
super(ZipCodeField, self).__init__(*args, **kwargs)
def clean(self, value):
value = super(ZipCodeField, self).clean(self, value)
from yourmodels import ZipCode
try:
ZipCode.objects.get(pk=value)
except ZipCode.DoesNotExist:
raise ValidationError, "Please enter a valid zip code"
return value
---
from django.contrib.admin import site
site.register(YourModel, YourAdminClass)
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---