# --------------------
# SquadSelector Class
# --------------------
class SquadSelector(models.Model):
fixture = models.ForeignKey(Fixture, verbose_name="Fixture",
core=True, help_text="Fixture to select squad for.")
gk = models.ForeignKey(Player, verbose_name="Goal Keeper",
related_name="gk", core=True, help_text="Name of Goal Keeper.")
rb = models.ForeignKey(Player, verbose_name="Right Back",
related_name="rb", core=True, help_text="Name of Right Back.")
cb1 = models.ForeignKey(Player, verbose_name="Centre Back",
related_name="cb1", core=True, help_text="Name of First Centre Back.")
cb2 = models.ForeignKey(Player, verbose_name="Centre Back",
related_name="cb2", core=True, help_text="Name of Second Centre
Back.")
lb = models.ForeignKey(Player, verbose_name="Left Back",
related_name="lb", core=True, help_text="Name of Left Back.")
rw = models.ForeignKey(Player, verbose_name="Right Wing",
related_name="rw", core=True, help_text="Name of Right Winger.")
cm1 = models.ForeignKey(Player, verbose_name="Centre Midfield",
related_name="cm1", core=True, help_text="Name of First Centre
Midfielder.")
cm2 = models.ForeignKey(Player, verbose_name="Centre Midfield",
related_name="cm2", core=True, help_text="Name of Second Centre
Midfielder.")
lw = models.ForeignKey(Player, verbose_name="Left Wing",
related_name="lw", core=True, help_text="Name of Left Winger.")
cf1 = models.ForeignKey(Player, verbose_name="Centre Forward",
related_name="cf1", core=True, help_text="Name of First Centre
Forward.")
cf2 = models.ForeignKey(Player, verbose_name="Centre Forward",
related_name="cf2", core=True, help_text="Name of Second Centre
Forward.")
sub1 = models.ForeignKey(Player, verbose_name="Sub 1",
related_name="sub1", blank=True, null=True, help_text="Name of 1st
Sub.")
sub2 = models.ForeignKey(Player, verbose_name="Sub 2",
related_name="sub2", blank=True, null=True, help_text="Name of 2nd
Sub.")
sub3 = models.ForeignKey(Player, verbose_name="Sub 3",
related_name="sub3", blank=True, null=True, help_text="Name of 3rd
Sub.")
sub4 = models.ForeignKey(Player, verbose_name="Sub 4",
related_name="sub4", blank=True, null=True, help_text="Name of 4th
Sub.")
sub5 = models.ForeignKey(Player, verbose_name="Sub 5",
related_name="sub5", blank=True, null=True, help_text="Name of 5th
Sub.")
class Admin:
pass
list_display = ('fixture', )
list_filter = ['fixture',]
search_fields = ['fixture']
# --------
# Accessor
# --------
#String method
def __str__ (self):
return str(self.gk)
def save(self):
# Instead of iterarting manually through all the players,
# we use self.__dict__ and remove the stuff we don't need.
squad = self.__dict__.copy()
try:
squad.pop('_fixture_cache')
except KeyError:
pass
try:
squad.pop('fixture_id')
except KeyError:
pass
for player_id in squad.values():
if player_id is not None:
appearance = Appearance()
appearance.player_id = player_id
appearance.result = self.fixture.result
appearance.save()
# ----------------
# Appearance Class
# ----------------
class Appearance(models.Model):
player = models.ForeignKey(Player, verbose_name="Player", core=True,
help_text="Name of player.")
result = models.ForeignKey(Result, verbose_name="Result",
edit_inline=models.TABULAR, num_in_admin=15, num_extra_on_change=3,
core=True, help_text="Result they played in.")
class Admin:
pass
list_display = ('result', 'player',)
list_filter = ['result', 'player',]
search_fields = ['player']
# --------
# Accessor
# --------
#String method
def __str__ (self):
return str(self.result)
def count(self,fieldname="*"):
return self.get_query_set().countAppearance(player)
#Counts number of goals a player has scored - this is a patch as
support for it is still in development
def countAppearance(self,fieldsname="*"):
counter = self.clone
counter._order_by = ()
counter._offset = None
counter._limit = None
counter._select_related = False
select, sql, params = counter._get_sql_clause()
if fieldname == '*':
column = '*'
else:
column = self.model._meta.get_field(fieldname).column
cursor = connection.cursor()
cursor.execute("SELECT COUNT(*)" + sql, params)
cursor.execute("SELECT COUNT(%s)" % (column) + sql, params)
return cursor.fetchone()[0]
When I add a "squad selector" I get the following error:
DoesNotExist at /admin/teams/squadselector/add/
Result matching query does not exist.
Request Method: POST
Request URL: http://duncanm.webfactional.com/admin/teams/squadselector/add/
Exception Type: DoesNotExist
Exception Value: Result matching query does not exist.
Exception Location: /home2/duncanm/lib/python2.4/django/db/models/
query.py in get, line 213
Traceback (innermost last)
Switch back to interactive view
* /home2/duncanm/lib/python2.4/django/core/handlers/base.py in
get_response
67. # Apply view middleware
68. for middleware_method in self._view_middleware:
69. response = middleware_method(request, callback,
callback_args, callback_kwargs)
70. if response:
71. return response
72.
73. try:
74. response = callback(request, *callback_args,
**callback_kwargs) ...
75. except Exception, e:
76. # If the view raised an exception, run it through
exception
77. # middleware, and if the exception middleware returns a
78. # response, use that. Otherwise, reraise the exception.
79. for middleware_method in self._exception_middleware:
80. response = middleware_method(request, e)
▶ Local vars
Variable Value
callback
<function _checklogin at 0xb7a1dbc4>
callback_args
('teams', 'squadselector')
callback_kwargs
{}
e
<django.db.models.base.DoesNotExist instance at 0xb79a594c>
exceptions
<module 'django.core.exceptions' from '/home2/duncanm/lib/
python2.4/django/core/exceptions.pyc'>
mail_admins
<function mail_admins at 0xb7c3de2c>
middleware_method
<bound method XViewMiddleware.process_view of
<django.middleware.doc.XViewMiddleware object at 0xb7cb854c>>
path
'/admin/teams/squadselector/add/'
request
<ModPythonRequest path:/admin/teams/squadselector/add/,
GET:<MultiValueDict: {}>, POST:<MultiValueDict: {'sub4': [''], 'rw':
['6'], 'lb': ['5'], 'sub3': [''], 'sub1': ['12'], 'cf2': ['11'],
'fixture': ['16'], 'cb2': ['4'], 'lw': ['9'], 'cb1': ['3'], 'rb':
['2'], 'sub2': ['13'], 'sub5': [''], 'gk': ['1'], 'cm2': ['8'], 'cm1':
['7'], 'cf1': ['10']}>, COOKIES:{'dbx-pagemeta': 'grabit=0-,1-,2+,3-,
4+,5+&advancedstuff=0-', 'dbx-postmeta': 'grabit=0+,1+,2+,3+,4+,
5+&advancedstuff=0-', 'sessionid':
'1fe6ff002f8fb560c332511c8159e2b4'}, META:{'AUTH_TYPE': None,
'CONTENT_LENGTH': 0L, 'CONTENT_TYPE': None, 'GATEWAY_INTERFACE': 'CGI/
1.1', 'HTTP_ACCEPT': 'text/xml,application/xml,application/xhtml
+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5',
'HTTP_ACCEPT_CHARSET': 'ISO-8859-1,utf-8;q=0.7,*;q=0.7',
'HTTP_ACCEPT_ENCODING': 'gzip,deflate', 'HTTP_ACCEPT_LANGUAGE': 'en-
gb,en;q=0.5', 'HTTP_CONTENT_LENGTH': '107', 'HTTP_CONTENT_TYPE':
'application/x-www-form-urlencoded', 'HTTP_COOKIE': 'dbx-
postmeta=grabit=0+,1+,2+,3+,4+,5+&advancedstuff=0-;
sessionid=1fe6ff002f8fb560c332511c8159e2b4; dbx-pagemeta=grabit=0-,1-,
2+,3-,4+,5+&advancedstuff=0-', 'HTTP_HOST':
'duncanm.webfactional.com', 'HTTP_MAX_FORWARDS': '10', 'HTTP_REFERER':
'http://duncanm.webfactional.com/admin/teams/squadselector/add/',
'HTTP_USER_AGENT': 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:
1.8.1.2) Gecko/20070219 Firefox/2.0.0.2', 'HTTP_X_FORWARDED_FOR':
'81.105.97.255', 'HTTP_X_FORWARDED_HOST': 'duncanm.webfactional.com',
'HTTP_X_FORWARDED_SERVER': 'duncanm.webfactional.com', 'PATH_INFO': '/
admin/teams/squadselector/add/', 'PATH_TRANSLATED': None,
'QUERY_STRING': None, 'REMOTE_ADDR': '127.0.0.1', 'REMOTE_HOST': None,
'REMOTE_IDENT': None, 'REMOTE_USER': None, 'REQUEST_METHOD': 'POST',
'SCRIPT_NAME': None, 'SERVER_NAME': 'web3.webfaction.com',
'SERVER_PORT': 0, 'SERVER_PROTOCOL': 'HTTP/1.1', 'SERVER_SOFTWARE':
'mod_python'}>
resolver
<django.core.urlresolvers.RegexURLResolver object at 0xb7cb860c>
response
None
self
<django.core.handlers.modpython.ModPythonHandler object at
0xb7a2d5ac>
settings
<django.conf.LazySettings object at 0xb7c8dccc>
urlresolvers
<module 'django.core.urlresolvers' from '/home2/duncanm/lib/
python2.4/django/core/urlresolvers.pyc'>
* /home2/duncanm/lib/python2.4/django/contrib/admin/views/
decorators.py in _checklogin
48. def _checklogin(request, *args, **kwargs):
49. if request.user.is_authenticated() and
request.user.is_staff:
50. # The user is valid. Continue to the admin page.
51. if request.POST.has_key('post_data'):
52. # User must have re-authenticated through a different
window
53. # or tab.
54. request.POST =
_decode_post_data(request.POST['post_data'])
55. return view_func(request, *args, **kwargs) ...
56.
57. assert hasattr(request, 'session'), "The Django admin
requires session middleware to be installed. Edit your
MIDDLEWARE_CLASSES setting to insert
'django.contrib.sessions.middleware.SessionMiddleware'."
58.
59. # If this isn't already the login page, display it.
60. if not request.POST.has_key(LOGIN_FORM_KEY):
61. if request.POST:
▶ Local vars
Variable Value
args
('teams', 'squadselector')
kwargs
{}
request
<ModPythonRequest path:/admin/teams/squadselector/add/,
GET:<MultiValueDict: {}>, POST:<MultiValueDict: {'sub4': [''], 'rw':
['6'], 'lb': ['5'], 'sub3': [''], 'sub1': ['12'], 'cf2': ['11'],
'fixture': ['16'], 'cb2': ['4'], 'lw': ['9'], 'cb1': ['3'], 'rb':
['2'], 'sub2': ['13'], 'sub5': [''], 'gk': ['1'], 'cm2': ['8'], 'cm1':
['7'], 'cf1': ['10']}>, COOKIES:{'dbx-pagemeta': 'grabit=0-,1-,2+,3-,
4+,5+&advancedstuff=0-', 'dbx-postmeta': 'grabit=0+,1+,2+,3+,4+,
5+&advancedstuff=0-', 'sessionid':
'1fe6ff002f8fb560c332511c8159e2b4'}, META:{'AUTH_TYPE': None,
'CONTENT_LENGTH': 0L, 'CONTENT_TYPE': None, 'GATEWAY_INTERFACE': 'CGI/
1.1', 'HTTP_ACCEPT': 'text/xml,application/xml,application/xhtml
+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5',
'HTTP_ACCEPT_CHARSET': 'ISO-8859-1,utf-8;q=0.7,*;q=0.7',
'HTTP_ACCEPT_ENCODING': 'gzip,deflate', 'HTTP_ACCEPT_LANGUAGE': 'en-
gb,en;q=0.5', 'HTTP_CONTENT_LENGTH': '107', 'HTTP_CONTENT_TYPE':
'application/x-www-form-urlencoded', 'HTTP_COOKIE': 'dbx-
postmeta=grabit=0+,1+,2+,3+,4+,5+&advancedstuff=0-;
sessionid=1fe6ff002f8fb560c332511c8159e2b4; dbx-pagemeta=grabit=0-,1-,
2+,3-,4+,5+&advancedstuff=0-', 'HTTP_HOST':
'duncanm.webfactional.com', 'HTTP_MAX_FORWARDS': '10', 'HTTP_REFERER':
'http://duncanm.webfactional.com/admin/teams/squadselector/add/',
'HTTP_USER_AGENT': 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:
1.8.1.2) Gecko/20070219 Firefox/2.0.0.2', 'HTTP_X_FORWARDED_FOR':
'81.105.97.255', 'HTTP_X_FORWARDED_HOST': 'duncanm.webfactional.com',
'HTTP_X_FORWARDED_SERVER': 'duncanm.webfactional.com', 'PATH_INFO': '/
admin/teams/squadselector/add/', 'PATH_TRANSLATED': None,
'QUERY_STRING': None, 'REMOTE_ADDR': '127.0.0.1', 'REMOTE_HOST': None,
'REMOTE_IDENT': None, 'REMOTE_USER': None, 'REQUEST_METHOD': 'POST',
'SCRIPT_NAME': None, 'SERVER_NAME': 'web3.webfaction.com',
'SERVER_PORT': 0, 'SERVER_PROTOCOL': 'HTTP/1.1', 'SERVER_SOFTWARE':
'mod_python'}>
view_func
<function _wrapped_view_func at 0xb7a1db8c>
* /home2/duncanm/lib/python2.4/django/views/decorators/cache.py in
_wrapped_view_func
32.
33. def never_cache(view_func):
34. """
35. Decorator that adds headers to a response so that it will
36. never be cached.
37. """
38. def _wrapped_view_func(request, *args, **kwargs):
39. response = view_func(request, *args, **kwargs) ...
40. add_never_cache_headers(response)
41. return response
42. return _wrapped_view_func
▶ Local vars
Variable Value
args
('teams', 'squadselector')
kwargs
{}
request
<ModPythonRequest path:/admin/teams/squadselector/add/,
GET:<MultiValueDict: {}>, POST:<MultiValueDict: {'sub4': [''], 'rw':
['6'], 'lb': ['5'], 'sub3': [''], 'sub1': ['12'], 'cf2': ['11'],
'fixture': ['16'], 'cb2': ['4'], 'lw': ['9'], 'cb1': ['3'], 'rb':
['2'], 'sub2': ['13'], 'sub5': [''], 'gk': ['1'], 'cm2': ['8'], 'cm1':
['7'], 'cf1': ['10']}>, COOKIES:{'dbx-pagemeta': 'grabit=0-,1-,2+,3-,
4+,5+&advancedstuff=0-', 'dbx-postmeta': 'grabit=0+,1+,2+,3+,4+,
5+&advancedstuff=0-', 'sessionid':
'1fe6ff002f8fb560c332511c8159e2b4'}, META:{'AUTH_TYPE': None,
'CONTENT_LENGTH': 0L, 'CONTENT_TYPE': None, 'GATEWAY_INTERFACE': 'CGI/
1.1', 'HTTP_ACCEPT': 'text/xml,application/xml,application/xhtml
+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5',
'HTTP_ACCEPT_CHARSET': 'ISO-8859-1,utf-8;q=0.7,*;q=0.7',
'HTTP_ACCEPT_ENCODING': 'gzip,deflate', 'HTTP_ACCEPT_LANGUAGE': 'en-
gb,en;q=0.5', 'HTTP_CONTENT_LENGTH': '107', 'HTTP_CONTENT_TYPE':
'application/x-www-form-urlencoded', 'HTTP_COOKIE': 'dbx-
postmeta=grabit=0+,1+,2+,3+,4+,5+&advancedstuff=0-;
sessionid=1fe6ff002f8fb560c332511c8159e2b4; dbx-pagemeta=grabit=0-,1-,
2+,3-,4+,5+&advancedstuff=0-', 'HTTP_HOST':
'duncanm.webfactional.com', 'HTTP_MAX_FORWARDS': '10', 'HTTP_REFERER':
'http://duncanm.webfactional.com/admin/teams/squadselector/add/',
'HTTP_USER_AGENT': 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:
1.8.1.2) Gecko/20070219 Firefox/2.0.0.2', 'HTTP_X_FORWARDED_FOR':
'81.105.97.255', 'HTTP_X_FORWARDED_HOST': 'duncanm.webfactional.com',
'HTTP_X_FORWARDED_SERVER': 'duncanm.webfactional.com', 'PATH_INFO': '/
admin/teams/squadselector/add/', 'PATH_TRANSLATED': None,
'QUERY_STRING': None, 'REMOTE_ADDR': '127.0.0.1', 'REMOTE_HOST': None,
'REMOTE_IDENT': None, 'REMOTE_USER': None, 'REQUEST_METHOD': 'POST',
'SCRIPT_NAME': None, 'SERVER_NAME': 'web3.webfaction.com',
'SERVER_PORT': 0, 'SERVER_PROTOCOL': 'HTTP/1.1', 'SERVER_SOFTWARE':
'mod_python'}>
view_func
<function add_stage at 0xb7a1db54>
* /home2/duncanm/lib/python2.4/django/contrib/admin/views/main.py
in add_stage
247. if opts.has_field_type(models.FileField):
248. new_data.update(request.FILES)
249.
250. errors = manipulator.get_validation_errors(new_data)
251. manipulator.do_html2python(new_data)
252.
253. if not errors:
254. new_object = manipulator.save(new_data) ...
255. pk_value = new_object._get_pk_val()
256. LogEntry.objects.log_action(request.user.id,
ContentType.objects.get_for_model(model).id, pk_value,
str(new_object), ADDITION)
257. msg = _('The %(name)s "%(obj)s" was added successfully.')
% {'name': opts.verbose_name, 'obj': new_object}
258. # Here, we distinguish between different save types by
checking for
259. # the presence of keys in request.POST.
260. if request.POST.has_key("_continue"):
▶ Local vars
Variable Value
app_label
'teams'
errors
{}
form_url
''
manipulator
<django.db.models.manipulators.AddManipulator object at
0xb79d3fcc>
model
<class 'htafc.teams.models.SquadSelector'>
model_name
'squadselector'
new_data
<MultiValueDict: {'sub5_id': [None], 'fixture': ['16'],
'cb1_id': ['3'], 'cm1_id': ['7'], 'gk_id': ['1'], 'gk': ['1'], 'rw':
['6'], 'lb': ['5'], 'lw': ['9'], 'cb2_id': ['4'], 'rb': ['2'],
'cf1_id': ['10'], 'cm2': ['8'], 'cm1': ['7'], 'sub2_id': ['13'],
'rb_id': ['2'], 'sub4': [''], 'sub5': [''], 'sub2': ['13'], 'sub3':
[''], 'sub1': ['12'], 'sub4_id': [None], 'cb2': ['4'], 'cb1': ['3'],
'sub3_id': [None], 'fixture_id': ['16'], 'cf2': ['11'], 'cf1': ['10'],
'lw_id': ['9'], 'sub1_id': ['12'], 'lb_id': ['5'], 'cf2_id': ['11'],
'cm2_id': ['8'], 'rw_id': ['6']}>
object_id_override
None
opts
<Options for SquadSelector>
post_url
'../'
post_url_continue
'../%s/'
request
<ModPythonRequest path:/admin/teams/squadselector/add/,
GET:<MultiValueDict: {}>, POST:<MultiValueDict: {'sub4': [''], 'rw':
['6'], 'lb': ['5'], 'sub3': [''], 'sub1': ['12'], 'cf2': ['11'],
'fixture': ['16'], 'cb2': ['4'], 'lw': ['9'], 'cb1': ['3'], 'rb':
['2'], 'sub2': ['13'], 'sub5': [''], 'gk': ['1'], 'cm2': ['8'], 'cm1':
['7'], 'cf1': ['10']}>, COOKIES:{'dbx-pagemeta': 'grabit=0-,1-,2+,3-,
4+,5+&advancedstuff=0-', 'dbx-postmeta': 'grabit=0+,1+,2+,3+,4+,
5+&advancedstuff=0-', 'sessionid':
'1fe6ff002f8fb560c332511c8159e2b4'}, META:{'AUTH_TYPE': None,
'CONTENT_LENGTH': 0L, 'CONTENT_TYPE': None, 'GATEWAY_INTERFACE': 'CGI/
1.1', 'HTTP_ACCEPT': 'text/xml,application/xml,application/xhtml
+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5',
'HTTP_ACCEPT_CHARSET': 'ISO-8859-1,utf-8;q=0.7,*;q=0.7',
'HTTP_ACCEPT_ENCODING': 'gzip,deflate', 'HTTP_ACCEPT_LANGUAGE': 'en-
gb,en;q=0.5', 'HTTP_CONTENT_LENGTH': '107', 'HTTP_CONTENT_TYPE':
'application/x-www-form-urlencoded', 'HTTP_COOKIE': 'dbx-
postmeta=grabit=0+,1+,2+,3+,4+,5+&advancedstuff=0-;
sessionid=1fe6ff002f8fb560c332511c8159e2b4; dbx-pagemeta=grabit=0-,1-,
2+,3-,4+,5+&advancedstuff=0-', 'HTTP_HOST':
'duncanm.webfactional.com', 'HTTP_MAX_FORWARDS': '10', 'HTTP_REFERER':
'http://duncanm.webfactional.com/admin/teams/squadselector/add/',
'HTTP_USER_AGENT': 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:
1.8.1.2) Gecko/20070219 Firefox/2.0.0.2', 'HTTP_X_FORWARDED_FOR':
'81.105.97.255', 'HTTP_X_FORWARDED_HOST': 'duncanm.webfactional.com',
'HTTP_X_FORWARDED_SERVER': 'duncanm.webfactional.com', 'PATH_INFO': '/
admin/teams/squadselector/add/', 'PATH_TRANSLATED': None,
'QUERY_STRING': None, 'REMOTE_ADDR': '127.0.0.1', 'REMOTE_HOST': None,
'REMOTE_IDENT': None, 'REMOTE_USER': None, 'REQUEST_METHOD': 'POST',
'SCRIPT_NAME': None, 'SERVER_NAME': 'web3.webfaction.com',
'SERVER_PORT': 0, 'SERVER_PROTOCOL': 'HTTP/1.1', 'SERVER_SOFTWARE':
'mod_python'}>
show_delete
False
* /home2/duncanm/lib/python2.4/django/db/models/manipulators.py in
save
94. params[f.attname] = param
95.
96. if self.change:
97. params[self.opts.pk.attname] = self.obj_key
98.
99. # First, save the basic object itself.
100. new_object = self.model(**params)
101. new_object.save() ...
102.
103. # Now that the object's been saved, save any uploaded
files.
104. for f in self.opts.fields:
105. if isinstance(f, FileField):
106. f.save_file(new_data, new_object, self.change and
self.original_object or None, self.change, rel=False)
107.
▶ Local vars
Variable Value
auto_now_add
False
f
<django.db.models.fields.related.ForeignKey object at
0xb7ad74ac>
new_data
<MultiValueDict: {'sub5_id': [None], 'fixture': ['16'],
'cb1_id': ['3'], 'cm1_id': ['7'], 'gk_id': ['1'], 'gk': ['1'], 'rw':
['6'], 'lb': ['5'], 'lw': ['9'], 'cb2_id': ['4'], 'rb': ['2'],
'cf1_id': ['10'], 'cm2': ['8'], 'cm1': ['7'], 'sub2_id': ['13'],
'rb_id': ['2'], 'sub4': [''], 'sub5': [''], 'sub2': ['13'], 'sub3':
[''], 'sub1': ['12'], 'sub4_id': [None], 'cb2': ['4'], 'cb1': ['3'],
'sub3_id': [None], 'fixture_id': ['16'], 'cf2': ['11'], 'cf1': ['10'],
'lw_id': ['9'], 'sub1_id': ['12'], 'lb_id': ['5'], 'cf2_id': ['11'],
'cm2_id': ['8'], 'rw_id': ['6']}>
new_object
<SquadSelector: Regan Allen>
param
None
params
{'cb1_id': '3', 'cb2_id': '4', 'cf1_id': '10', 'cf2_id': '11',
'cm1_id': '7', 'cm2_id': '8', 'fixture_id': '16', 'gk_id': '1', 'id':
None, 'lb_id': '5', 'lw_id': '9', 'rb_id': '2', 'rw_id': '6',
'sub1_id': '12', 'sub2_id': '13', 'sub3_id': None, 'sub4_id': None,
'sub5_id': None}
self
<django.db.models.manipulators.AddManipulator object at
0xb79d3fcc>
* /home2/duncanm/webapps/django/htafc/teams/models.py in save
575. except KeyError:
576. pass
577.
578. for player_id in squad.values():
579. if player_id is not None:
580. appearance = Appearance()
581. appearance.player_id = player_id
582. appearance.result = self.fixture.result ...
583. appearance.save()
584.
585.
586. # ------------------
587. # Match Report class
588. # ------------------
▶ Local vars
Variable Value
appearance
Error in formatting:
player_id
'2'
self
<SquadSelector: Regan Allen>
squad
{'cb1_id': '3', 'cb2_id': '4', 'cf1_id': '10', 'cf2_id': '11',
'cm1_id': '7', 'cm2_id': '8', 'gk_id': '1', 'id': None, 'lb_id': '5',
'lw_id': '9', 'rb_id': '2', 'rw_id': '6', 'sub1_id': '12', 'sub2_id':
'13', 'sub3_id': None, 'sub4_id': None, 'sub5_id': None}
* /home2/duncanm/lib/python2.4/django/db/models/fields/related.py
in __get__
120. self.related = related
121.
122. def __get__(self, instance, instance_type=None):
123. if instance is None:
124. raise AttributeError, "%s must be accessed via instance" %
self.related.opts.object_name
125.
126. params = {'%s__pk' % self.related.field.name:
instance._get_pk_val()}
127. rel_obj =
self.related.model._default_manager.get(**params) ...
128. return rel_obj
129.
130. def __set__(self, instance, value):
131. if instance is None:
132. raise AttributeError, "%s must be accessed via instance" %
self.related.opts.object_name
133. # Set the value of the related field
▶ Local vars
Variable Value
instance
<Fixture: Date: 2007-04-07, Venue: A, Vs: Computing 3>
instance_type
<class 'htafc.teams.models.Fixture'>
params
{'fixture__pk': 16L}
self
<django.db.models.fields.related.SingleRelatedObjectDescriptor
object at 0xb7acc72c>
* /home2/duncanm/lib/python2.4/django/db/models/manager.py in get
60. def distinct(self, *args, **kwargs):
61. return self.get_query_set().distinct(*args, **kwargs)
62.
63. def extra(self, *args, **kwargs):
64. return self.get_query_set().extra(*args, **kwargs)
65.
66. def get(self, *args, **kwargs):
67. return self.get_query_set().get(*args, **kwargs) ...
68.
69. def get_or_create(self, **kwargs):
70. return self.get_query_set().get_or_create(**kwargs)
71.
72. def create(self, **kwargs):
73. return self.get_query_set().create(**kwargs)
▶ Local vars
Variable Value
args
()
kwargs
{'fixture__pk': 16L}
self
<django.db.models.manager.Manager object at 0xb7acc86c>
* /home2/duncanm/lib/python2.4/django/db/models/query.py in get
206. "Performs the SELECT and returns a single object matching
the given keyword arguments."
207. clone = self.filter(*args, **kwargs)
208. # clean up SQL by removing unneeded ORDER BY
209. if not clone._order_by:
210. clone._order_by = ()
211. obj_list = list(clone)
212. if len(obj_list) < 1:
213. raise self.model.DoesNotExist, "%s matching query does not
exist." % self.model._meta.object_name ...
214. assert len(obj_list) == 1, "get() returned more than one
%s -- it returned %s! Lookup parameters were %s" %
(self.model._meta.object_name, len(obj_list), kwargs)
215. return obj_list[0]
216.
217. def create(self, **kwargs):
218. """
219. Create a new object with the given kwargs, saving it to
the database
▶ Local vars
Variable Value
args
()
clone
[]
kwargs
{'fixture__pk': 16L}
obj_list
[]
self
[<Result: Skirlaugh A.F.C.>, <Result: Eastrington F.C.>,
<Result: Withernsea F.C.>, <Result: Skidy Millers>, <Result: North
Ferriby U18's>, <Result: Market Weighton 2nds>, <Result: West Hull
F.C.>, <Result: Goole Town Under 18's>, <Result: North Cave U17's>,
<Result: Holme Rovers U17's>, <Result: Market Weighton U16's>,
<Result: Westella Willerby Under 18's>, <Result: Computing 2>]
Traceback (most recent call last):
File "/home2/duncanm/lib/python2.4/django/core/handlers/base.py" in
get_response
74. response = callback(request, *callback_args, **callback_kwargs)
File "/home2/duncanm/lib/python2.4/django/contrib/admin/views/
decorators.py" in _checklogin
55. return view_func(request, *args, **kwargs)
File "/home2/duncanm/lib/python2.4/django/views/decorators/cache.py"
in _wrapped_view_func
39. response = view_func(request, *args, **kwargs)
File "/home2/duncanm/lib/python2.4/django/contrib/admin/views/main.py"
in add_stage
254. new_object = manipulator.save(new_data)
File "/home2/duncanm/lib/python2.4/django/db/models/manipulators.py"
in save
101. new_object.save()
File "/home2/duncanm/webapps/django/htafc/teams/models.py" in save
582. appearance.result = self.fixture.result
File "/home2/duncanm/lib/python2.4/django/db/models/fields/related.py"
in __get__
127. rel_obj = self.related.model._default_manager.get(**params)
File "/home2/duncanm/lib/python2.4/django/db/models/manager.py" in get
67. return self.get_query_set().get(*args, **kwargs)
File "/home2/duncanm/lib/python2.4/django/db/models/query.py" in get
213. raise self.model.DoesNotExist, "%s matching query does not
exist." % self.model._meta.object_name
DoesNotExist at /admin/teams/squadselector/add/
Result matching query does not exist.
I have no idea what is causing this to happen, as I thought my models
and methods were ok, could some please advise?
Regards,
Duncan
DoesNotExist at /admin/teams/squadselector/add/
Result matching query does not exist.
Request Method: POST
Request URL: http://duncanm.webfactional.com/admin/teams/squadselector/add/
Exception Type: DoesNotExist
Exception Value: Result matching query does not exist.
Exception Location: /home2/duncanm/lib/python2.4/django/db/models/
query.py in get, line 213
This post is really too long to be able to understand what and where
it's going on.
"Revision matching query does not exist" is usually caused when you're
trying to select something out of the database and your query coudn't
match what you're looking for. DoesNotExist is an exception that
notifies you of this and is something you should be catching, if
you're doing selects that might not give you any results.
Furtermore, this model looks a bit bloated. Maybe you should consider
a M2M relation, with an additional field, that specifies the position
of the player, instead of harcoding them as separate fields in your
model. It's much more heavy and difficult to process in the way you've
defined it.