heya, The thing is, the foreign key field is on the Address object, linking to another object that *has* an address.
AFAIK, that's how it's meant to be in database design. That's why I need to put something there - e.g. class Address(models.Model): ... user = models.ForeignKey(UserProfile) but that doesn't work for hospitals, or say institutions, or anything else that needs an address. So I can't just pick one. Or is my design off? Cheers, Victor On Jan 19, 6:03 pm, greatlemer <greatle...@googlemail.com> wrote: > On Jan 19, 5:25 am, Victor Hooi <victorh...@gmail.com> wrote: > > > > > 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 > > Hi, > > I think here what you're looking for is to use: > address = models.ForeignKey(Address) > rather than a GenericRelation. GenericRelations are for cases when > you don't know what the target model should be (hence the extra > content_type field). > > -- > G
-- 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.