#806 closed defect (fixed)
module methods and adding a new record
| Reported by: | Owned by: | Adrian Holovaty | |
|---|---|---|---|
| Component: | Core (Other) | Version: | |
| Severity: | normal | Keywords: | |
| Cc: | Triage Stage: | Unreviewed | |
| Has patch: | no | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description
Hi.
I'm having some 'fun' with using module functions, and would appreciate some enlightenment.
this is the class & function.
class TagType(meta.Model):
name = meta.CharField(maxlength=40, core=True, unique=True)
class META:
admin = meta.Admin();
ordering = [ 'name' ]
def __repr__(self):
return self.name;
class Tag(meta.Model):
name = meta.CharField(maxlength=40, core=True )
description = meta.TextField( unique=False, blank=True)
type = meta.ForeignKey(TagType, radio_admin=True, default=1)
class META:
admin = meta.Admin()
ordering = [ 'name' ]
unique_together = (("name", "type"),)
def _module_name_to_id(tagname, insert_if_not_there=False):
from keyman.apps.conf.models.conf import tagtypes, TagType
"convert a XXXX:TAG into it's ID name"
format = tagname.lower().split(":")
tag_real_name = format.pop()
tag_type = "normal"
if ( format.__len__() > 0 ):
tag_type = format[0]
cursor= db.cursor()
cursor.execute( """
SELECT t.id as id, t.name as name, t.description as description, t.type_id as type_id
FROM conf_tags t, conf_tagtypes tt
WHERE t.type_id =tt.id
AND t.name = %s
AND tt.name = %s """, [tag_real_name, tag_type] )
row = cursor.fetchone()
if row:
return Tag(*row)
else:
if insert_if_not_there:
t = tagtypes.get_object(name__exact = tag_type )
newtag = t.add_tag( tag_real_name )
return newtag
else:
raise TagDoesNotExist
so what it tries to do is return a id when given a the type/name combo like
a = tags.get_name_to_id("site:foo")
and that works pretty well, as I'm going straight to the DB to get that.
but when I try to add a new tag I am using the model API.
>>> from django.models.conf import *
>>> a=tags.name_to_id("foobar",True)
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "/usr/local/lib/python2.4/site-packages/keyman/apps/conf/models/conf.py", line 64, in _module_name_to_id
newtag = t.add_tag( tag_real_name )
AttributeError: 'TagType' object has no attribute 'add_tag'
when I do the same code from the python command line I see
>>> t = tagtypes.get_object(name__exact='normal')
>>> t
normal
<class 'django.models.conf.TagType'>
>>> t.add_tag('foobar')
foobar
>>> x =t.add_tag('foobar2')
>>> x.id
55L
>>>
so I am at a loss ;(
Note:
See TracTickets
for help on using tickets.
This should no longer be an issue with magic-removal.