heya,

I'm trying to use an "Address" model as a generic relation against
multiple other models (e.g. in a "User Profile", for each User, as
well as for "Building", "Institution", and various other ones).

So I've added the content_type, object_id and content_object fields to
Address.

class Address(models.Model):
    """
    Basic object for holding address information - for either people
or institutions.
    """
    street_address = models.CharField(max_length=50)
    suburb = models.CharField(max_length=20)
    state = models.CharField(max_length=3,
choices=AUSTRALIAN_STATES_CHOICES)
    # PositiveIntegerField doesn't allow max_length? Have to use form
validation for this.
    postcode = models.CharField(max_length=4)
    # This should probably be a list of choices.
    country = models.CharField(max_length=20)
    address_category = models.OneToOneField(AddressCategory)

    # We make Address a generic relation model
    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField()
    content_object = generic.GenericForeignKey('content_type',
'object_id')

    class Meta:
        verbose_name_plural = 'Addresses'

    def __unicode__(self):
        return self.street_address + ', ' + self.suburb

 And my other objects have GenericRelations to Address. E.g.:

class Hospital(models.Model):
    name = models.CharField(max_length=20)
    address = generic.GenericRelation(Address)

    def __unicode__(self):
        return self.name

However, when I try and use the Django admin to add an Address item,
the form has fields for content_type and object_id. I had thought
these fields wouldn't appear? Also, the model won't validate/save if I
don't fill in these fields. I don't think I'm quite using this right -
is there a better way of doing what I'm trying to achieve here?

Also, I'm using the Address object as in Inline for the other models,
so I have an Address Inline as well (Nb: I'm using django-reversion
with this site, hence the "VersionAdmin")

class AddressAdmin(VersionAdmin):
    pass
class AddressInline(generic.GenericTabularInline):
    model = Address
...
class HospitalAdmin(admin.ModelAdmin):
    inlines = [
        AddressInline,
    ]
...
admin.site.register(Address, AddressAdmin)

Thanks,
Victor
-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-us...@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.


Reply via email to