On Sun, Feb 8, 2009 at 7:51 PM, Patricio Palma <[email protected]>wrote:
> [snip]
> -----------------------------------------------------------
> models.py
> from django.contrib.auth.models import User
> class MyUser(User):
> chilean_rut = CLRutField(_('RUT'),primary_key=True)
> some_field = models.CharField(max_length=50)
> ------------------------------------------------------------
> admin.py
> class MyUserAdmin(admin.ModelAdmin):
> list_display = ('chilean_rut', 'email','some_field')
> admin.site.register(MyUser,MyUserAdmin)
>
> -------------------------------------------------------------
>
> And my list_display is EMPTY ( on the
> http://127.0.0.1:8000/admin/myapp/myuser/)
>
The problem here seems to be caused by setting primary_key=True on one of
the fields in the model that inherits from another. You can see it using
just these simple models:
class BaseM(models.Model):
base_name = models.CharField(max_length=100)
def __unicode__(self):
return self.base_name
class DerivedM(BaseM):
customPK = models.IntegerField(primary_key=True)
derived_name = models.CharField(max_length=100)
def __unicode__(self):
return "PK = %d, base_name = %s, derived_name = %s" % \
(self.customPK, self.base_name, self.derived_name)
and manage.py shell (output reformatted for readability):
Python 2.5.1 (r251:54863, Jul 31 2008, 23:17:40)
[GCC 4.1.3 20070929 (prerelease) (Ubuntu 4.1.2-16ubuntu2)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from ttt.models import DerivedM
>>> from django.db import connection
>>> DerivedM.objects.create(customPK=44, base_name="b1", derived_name="d1")
<DerivedM: PK = 44, base_name = b1, derived_name = d1>
>>> DerivedM.objects.all()
[]
>>> connection.queries[-1]
{'time': '0.006',
'sql': u'SELECT
`ttt_basem`.`id`,
`ttt_basem`.`base_name`,
`ttt_derivedm`.`basem_ptr_id`,
`ttt_derivedm`.`customPK`,
`ttt_derivedm`.`derived_name`
FROM `ttt_derivedm` INNER JOIN `ttt_basem`
ON (`ttt_derivedm`.`customPK` = `ttt_basem`.`id`) LIMIT 21'}
>>>
The ORM is joining the two tables and attempting to match the
manually-specified custom PK from the child table to the auto-generated id
in the parent table, which results in finding nothing. I do not know if
specifying primary_key=True on a field in a child table is just not allowed
(in which case it should probably be flagged as an error during validation)
or if the ORM should be handling this properly. I do not see any ticket
open that describes this case; you might want to open one since it seems
something ought to be changed here to either report an invalid model
definition or handle this case properly.
Karen
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---