[Django] #22047: Cannot resolve keyword u'group_ptr' into field. Choices are: group, id, name, permissions, user

20 views
Skip to first unread message

Django

unread,
Feb 14, 2014, 3:58:16 PM2/14/14
to django-...@googlegroups.com
#22047: Cannot resolve keyword u'group_ptr' into field. Choices are: group, id,
name, permissions, user
----------------------------------------------+--------------------
Reporter: ctcbmw | Owner: nobody
Type: Bug | Status: new
Component: Database layer (models, ORM) | Version: 1.6
Severity: Normal | Keywords:
Triage Stage: Unreviewed | Has patch: 0
Easy pickings: 0 | UI/UX: 0
----------------------------------------------+--------------------
I recently tried to upgrade from 1.5.1 to 1.6.2 and am now getting this
error for inherited many to many relationships.

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/opt/bg/common/lib/python2.7/site-
packages/django/db/models/manager.py", line 133, in all
return self.get_queryset()
File "/opt/bg/common/lib/python2.7/site-
packages/django/db/models/fields/related.py", line 549, in get_queryset
return super(ManyRelatedManager,
self).get_queryset().using(db)._next_is_sticky().filter(**self.core_filters)
File "/opt/bg/common/lib/python2.7/site-
packages/django/db/models/query.py", line 590, in filter
return self._filter_or_exclude(False, *args, **kwargs)
File "/opt/bg/common/lib/python2.7/site-
packages/django/db/models/query.py", line 608, in _filter_or_exclude
clone.query.add_q(Q(*args, **kwargs))
File "/opt/bg/common/lib/python2.7/site-
packages/django/db/models/sql/query.py", line 1198, in add_q
clause = self._add_q(where_part, used_aliases)
File "/opt/bg/common/lib/python2.7/site-
packages/django/db/models/sql/query.py", line 1234, in _add_q
current_negated=current_negated)
File "/opt/bg/common/lib/python2.7/site-
packages/django/db/models/sql/query.py", line 1100, in build_filter
allow_explicit_fk=True)
File "/opt/bg/common/lib/python2.7/site-
packages/django/db/models/sql/query.py", line 1357, in setup_joins
names, opts, allow_many, allow_explicit_fk)
File "/opt/bg/common/lib/python2.7/site-
packages/django/db/models/sql/query.py", line 1277, in names_to_path
"Choices are: %s" % (name, ", ".join(available)))
django.core.exceptions.FieldError: Cannot resolve keyword u'group_ptr'
into field. Choices are: group, id, name, permissions, user

--
Ticket URL: <https://code.djangoproject.com/ticket/22047>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

Django

unread,
Feb 14, 2014, 4:00:04 PM2/14/14
to django-...@googlegroups.com
#22047: Cannot resolve keyword u'group_ptr' into field. Choices are: group, id,
name, permissions, user
-------------------------------------+-------------------------------------

Reporter: ctcbmw | Owner: nobody
Type: Bug | Status: new
Component: Database layer | Version: 1.6
(models, ORM) | Resolution:
Severity: Normal | Triage Stage:
Keywords: | Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0

Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by ctcbmw):

* needs_better_patch: => 0
* needs_tests: => 0
* needs_docs: => 0


Comment:

My model looks like so.

import json, logging, hashlib, random, time, base64, sys, urlparse
from django.contrib.auth.models import User as DjangoUser, Group as
DjangoGroup, GroupManager as DjangoGroupManager

class GroupManager(DjangoGroupManager):
pass

class Group(DjangoGroup):
group_name = models.CharField(max_length=80, null=False)
users = models.ManyToManyField('User', through='Membership',
related_name="groups")

objects = GroupManager()

def __str__(self):
return self.group_name

def __unicode__(self):
return self.__str__()

def save(self, *args, **kwargs):
# Per django, name needs to be unique
# But in our case, different companies can have the same group
name
if not self.id:
self.name = generateSalt()
super(Group, self).save(*args, **kwargs)

def generateSalt():
salt = hashlib.sha1(str(random.random())).hexdigest()[:5]
t = int(time.time())
if isinstance(t, unicode):
t = t.encode('utf-8')
return hashlib.sha1(salt + str(t)).hexdigest()

class User(DjangoUser):
deleted = models.BooleanField(default=False, null=False)
active = models.BooleanField(default=True, null=False)

def __str__(self):
return self.getFullName()

def __unicode__(self):
return unicode(self.__str__())

class Membership(models.Model):
user = models.ForeignKey(User)
group = models.ForeignKey(Group)
date_joined = models.DateField()

--
Ticket URL: <https://code.djangoproject.com/ticket/22047#comment:1>

Django

unread,
Feb 14, 2014, 4:03:34 PM2/14/14
to django-...@googlegroups.com
#22047: Cannot resolve keyword u'group_ptr' into field. Choices are: group, id,
name, permissions, user
-------------------------------------+-------------------------------------

Reporter: ctcbmw | Owner: nobody
Type: Bug | Status: new
Component: Database layer | Version: 1.6
(models, ORM) | Resolution:
Severity: Normal | Triage Stage:
Keywords: | Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0

Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------

Comment (by ctcbmw):

This error will happen when you try to navigate through the users'
django.db.models.fields.related.ManyRelatedManager

>>> g = Group.objects.get(id=89)
>>> g.users.all()

--
Ticket URL: <https://code.djangoproject.com/ticket/22047#comment:2>

Django

unread,
Feb 15, 2014, 7:01:27 AM2/15/14
to django-...@googlegroups.com
#22047: Cannot resolve keyword u'group_ptr' into field. Choices are: group, id,
name, permissions, user
-------------------------------------+-------------------------------------
Reporter: ctcbmw | Owner: mondone
Type: Bug | Status: assigned

Component: Database layer | Version: 1.6
(models, ORM) | Resolution:
Severity: Normal | Triage Stage:
Keywords: | Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0

Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by mondone):

* owner: nobody => mondone
* status: new => assigned


--
Ticket URL: <https://code.djangoproject.com/ticket/22047#comment:3>

Django

unread,
Feb 15, 2014, 7:23:04 AM2/15/14
to django-...@googlegroups.com
#22047: Cannot resolve keyword u'group_ptr' into field. Choices are: group, id,
name, permissions, user
-------------------------------------+-------------------------------------
Reporter: ctcbmw | Owner: mondone
Type: Bug | Status: assigned
Component: Database layer | Version: 1.6
(models, ORM) | Resolution:
Severity: Normal | Triage Stage:
Keywords: | Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0

Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------

Comment (by bmispelon):

I slimmed down the models a bit:
{{{#!python
from django.db import models

from django.contrib.auth.models import User as DjangoUser, Group as
DjangoGroup

class User(DjangoUser):
pass

class Group(DjangoGroup):
users = models.ManyToManyField(User, through='Membership',
related_name='groups')

class Membership(models.Model):


user = models.ForeignKey(User)
group = models.ForeignKey(Group)
}}}

The problem seems to be the `related_name='groups'` parameter. If you
remove it, things work.

I'm not fully convinced that this is a bug because having `groups` as a
`related_name` actually clashes with the `groups` field on `User`.

--
Ticket URL: <https://code.djangoproject.com/ticket/22047#comment:4>

Django

unread,
Feb 15, 2014, 9:36:58 AM2/15/14
to django-...@googlegroups.com
#22047: Cannot resolve keyword u'group_ptr' into field. Choices are: group, id,
name, permissions, user
-------------------------------------+-------------------------------------
Reporter: ctcbmw | Owner: mondone
Type: Bug | Status: closed

Component: Database layer | Version: 1.6
(models, ORM) | Resolution: invalid

Severity: Normal | Triage Stage:
Keywords: | Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0

Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by AeroNotix):

* status: assigned => closed
* resolution: => invalid


Comment:

https://docs.djangoproject.com/en/dev/topics/db/models/#fields mentions
that one should not create fields which clash with the API. You create a
field which clashes with the API. Ergo, it doesn't work.

--
Ticket URL: <https://code.djangoproject.com/ticket/22047#comment:5>

Django

unread,
Feb 15, 2014, 9:42:58 AM2/15/14
to django-...@googlegroups.com
#22047: Cannot resolve keyword u'group_ptr' into field. Choices are: group, id,
name, permissions, user
-------------------------------------+-------------------------------------
Reporter: ctcbmw | Owner: mondone
Type: Bug | Status: new

Component: Database layer | Version: 1.6
(models, ORM) | Resolution:
Severity: Normal | Triage Stage: Accepted
Keywords: | Needs documentation: 0
Has patch: 1 | Patch needs improvement: 0
Needs tests: 0 | UI/UX: 0
Easy pickings: 0 |
-------------------------------------+-------------------------------------
Changes (by chrismedrela):

* status: closed => new
* has_patch: 0 => 1
* resolution: invalid =>
* stage: Unreviewed => Accepted


Comment:

@AeroNotix, you're right, but the clash should be detected by system check
framework. I and mondone have written a patch:
https://github.com/django/django/pull/2289.

--
Ticket URL: <https://code.djangoproject.com/ticket/22047#comment:6>

Django

unread,
Feb 15, 2014, 9:44:49 AM2/15/14
to django-...@googlegroups.com
#22047: Cannot resolve keyword u'group_ptr' into field. Choices are: group, id,
name, permissions, user
-------------------------------------+-------------------------------------
Reporter: ctcbmw | Owner: mondone
Type: Bug | Status: new

Component: Database layer | Version: 1.6
(models, ORM) | Resolution:
Severity: Normal | Triage Stage: Ready for
Keywords: | checkin
Has patch: 1 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0

Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by mondone):

* stage: Accepted => Ready for checkin


--
Ticket URL: <https://code.djangoproject.com/ticket/22047#comment:7>

Django

unread,
Feb 15, 2014, 11:24:31 AM2/15/14
to django-...@googlegroups.com
#22047: Cannot resolve keyword u'group_ptr' into field. Choices are: group, id,
name, permissions, user
-------------------------------------+-------------------------------------
Reporter: ctcbmw | Owner: mondone
Type: Bug | Status: closed

Component: Database layer | Version: 1.6
(models, ORM) | Resolution: fixed

Severity: Normal | Triage Stage: Ready for
Keywords: | checkin
Has patch: 1 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0

Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Baptiste Mispelon <bmispelon@…>):

* status: new => closed
* resolution: => fixed


Comment:

In [changeset:"d0133504e57589dc8983a20bf488e069bddd772c"]:
{{{
#!CommitTicketReference repository=""
revision="d0133504e57589dc8983a20bf488e069bddd772c"
Fixed #22047 -- detecting related_name clash with inheritance

Thanks to mondone for fruitful colaboration.
}}}

--
Ticket URL: <https://code.djangoproject.com/ticket/22047#comment:8>

Django

unread,
Feb 15, 2014, 11:28:58 PM2/15/14
to django-...@googlegroups.com
#22047: Cannot resolve keyword u'group_ptr' into field. Choices are: group, id,
name, permissions, user
-------------------------------------+-------------------------------------
Reporter: ctcbmw | Owner: mondone
Type: Bug | Status: closed
Component: Database layer | Version: 1.6
(models, ORM) | Resolution: fixed
Severity: Normal | Triage Stage: Ready for
Keywords: | checkin
Has patch: 1 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0

Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------

Comment (by ctcbmw):

Thanks for discovering the real issue, I'll ensure there are no field and
related name clashes, the error didnt help much in seeing that issue.

--
Ticket URL: <https://code.djangoproject.com/ticket/22047#comment:9>

Reply all
Reply to author
Forward
0 new messages