#================================================================================
# Document
#================================================================================
class Document(meta.Model):
#MAIN FIELDS
doc_date = meta.DateField('date')
doc_subj = meta.CharField('subj', maxlength=250)
doc_text = meta.TextField('text', maxlength=250, blank=True)
#================================================================================
# Letter
#================================================================================
class Letter(meta.Model):
#IS LETTER
document = meta.OneToOneField(Document)
doc_number = meta.CharField('doc number', maxlength=20)
# from and to ForeignKeys were skipped
#================================================================================
# Order
#================================================================================
class Order(meta.Model):
#IS ORDER
letter = meta.OneToOneField(Letter)
order_date_plan = meta.DateField('order date plan')
order_date_fakt = meta.DateField('order date fakt', blank=True, null=True)
Document can be simple or Letter, and Document that is Letter can be an Order or not.
This example works fine with old model syntax.
With a new-style model syntax any relations between Letter - Order are fail.
Document - Letter relation works fine.
>>> from django.models.main import *
>>> d = documents.get_object(pk=21)
>>> l = letters.get_object(pk=21)
>>> o = orders.get_object(pk=21)
>>> d.get_letter()
Letter 21
>>> l.get_document()
Document 21
OK
Now try Letter - Order
>>> l.get_order()
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "C:\Python24\Lib\site-packages\django-1.0.0-py2.4.egg\django\utils\functi
onal.py", line 3, in _curried
return args[0](*(args[1:]+moreargs), **dict(kwargs.items() + morekwargs.item
s()))
File "C:\Python24\Lib\site-packages\django-1.0.0-py2.4.egg\django\core\meta\__
init__.py", line 931, in method_get_related
kwargs['%s__%s__exact' % (rel_field.name, rel_field.rel.to.pk.name)] = getat
tr(self, rel_field.rel.field_name)
AttributeError: 'Letter' object has no attribute 'document'
>>>
>>>
>>>
>>> o.get_letter()
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "C:\Python24\Lib\site-packages\django-1.0.0-py2.4.egg\django\utils\functi
onal.py", line 3, in _curried
return args[0](*(args[1:]+moreargs), **dict(kwargs.items() + morekwargs.item
s()))
File "C:\Python24\Lib\site-packages\django-1.0.0-py2.4.egg\django\core\meta\__
init__.py", line 873, in method_get_many_to_one
retrieved_obj = mod.get_object(**{'%s__exact' % field_with_rel.rel.field_nam
e: val})
File "C:\Python24\Lib\site-packages\django-1.0.0-py2.4.egg\django\utils\functi
onal.py", line 3, in _curried
return args[0](*(args[1:]+moreargs), **dict(kwargs.items() + morekwargs.item
s()))
File "C:\Python24\Lib\site-packages\django-1.0.0-py2.4.egg\django\core\meta\__
init__.py", line 1083, in function_get_object
obj_list = function_get_list(opts, klass, **kwargs)
File "C:\Python24\Lib\site-packages\django-1.0.0-py2.4.egg\django\core\meta\__
init__.py", line 1123, in function_get_list
return list(function_get_iterator(opts, klass, **kwargs))
File "C:\Python24\Lib\site-packages\django-1.0.0-py2.4.egg\django\core\meta\__
init__.py", line 1105, in function_get_iterator
select, sql, params = function_get_sql_clause(opts, **kwargs)
File "C:\Python24\Lib\site-packages\django-1.0.0-py2.4.egg\django\core\meta\__
init__.py", line 1302, in function_get_sql_clause
tables2, join_where2, where2, params2, _ = _parse_lookup(kwargs.items(), opt
s)
File "C:\Python24\Lib\site-packages\django-1.0.0-py2.4.egg\django\core\meta\__
init__.py", line 1231, in _parse_lookup
_throw_bad_kwarg_error(kwarg)
File "C:\Python24\Lib\site-packages\django-1.0.0-py2.4.egg\django\core\meta\__
init__.py", line 1181, in _throw_bad_kwarg_error
raise TypeError, "got unexpected keyword argument '%s'" % kwarg
TypeError: got unexpected keyword argument 'document__exact'
>>>
>>>