i have 2 django/python applications 1 running on django 1.8 , python 3.4 , other running on django 1.8 , python 2.7. these applications share database , use python package houses several of models shared between 2 applications in few different apps.
the application running on 3.4 works fine application running on 2.7 throws valueerror: relate model 'model_reference' cannot resolved.
in psuedo example package core_app 2 models within seperate apps called foobar , barfoo contained in core_app.
foobar/models.py
class model_a(models.model): name = textfield()
barfoo/models.py
class model_b(models.model): model_a = foreignkey('core_app_foobar.model_a')
here full stack trace.
/home/ubuntu/moi/local/lib/python2.7/site-packages/django/db/models/manager.pyc in manager_method(self, *args, **kwargs) 125 def create_method(name, method): 126 def manager_method(self, *args, **kwargs): --> 127 return getattr(self.get_queryset(), name)(*args, **kwargs) 128 manager_method.__name__ = method.__name__ 129 manager_method.__doc__ = method.__doc__ /home/ubuntu/moi/local/lib/python2.7/site-packages/django/db/models/query.pyc in get(self, *args, **kwargs) 326 if self.query.can_filter(): 327 clone = clone.order_by() --> 328 num = len(clone) 329 if num == 1: 330 return clone._result_cache[0] /home/ubuntu/moi/local/lib/python2.7/site-packages/django/db/models/query.pyc in __len__(self) 142 143 def __len__(self): --> 144 self._fetch_all() 145 return len(self._result_cache) 146 /home/ubuntu/moi/local/lib/python2.7/site-packages/django/db/models/query.pyc in _fetch_all(self) 963 def _fetch_all(self): 964 if self._result_cache none: --> 965 self._result_cache = list(self.iterator()) 966 if self._prefetch_related_lookups , not self._prefetch_done: 967 self._prefetch_related_objects() /home/ubuntu/moi/local/lib/python2.7/site-packages/django/db/models/query.pyc in iterator(self) 236 # execute query. fill compiler.select, klass_info, 237 # , annotations. --> 238 results = compiler.execute_sql() 239 select, klass_info, annotation_col_map = (compiler.select, compiler.klass_info, 240 compiler.annotation_col_map) /home/ubuntu/moi/local/lib/python2.7/site-packages/django/db/models/sql/compiler.pyc in execute_sql(self, result_type) 827 result_type = no_results 828 try: --> 829 sql, params = self.as_sql() 830 if not sql: 831 raise emptyresultset /home/ubuntu/moi/local/lib/python2.7/site-packages/django/db/models/sql/compiler.pyc in as_sql(self, with_limits, with_col_aliases, subquery) 376 refcounts_before = self.query.alias_refcount.copy() 377 try: --> 378 extra_select, order_by, group_by = self.pre_sql_setup() 379 if with_limits , self.query.low_mark == self.query.high_mark: 380 return '', () /home/ubuntu/moi/local/lib/python2.7/site-packages/django/db/models/sql/compiler.pyc in pre_sql_setup(self) 46 might not have pieces in place @ time. 47 """ ---> 48 self.setup_query() 49 order_by = self.get_order_by() 50 extra_select = self.get_extra_select(order_by, self.select) /home/ubuntu/moi/local/lib/python2.7/site-packages/django/db/models/sql/compiler.pyc in setup_query(self) 37 if all(self.query.alias_refcount[a] == 0 in self.query.tables): 38 self.query.get_initial_alias() ---> 39 self.select, self.klass_info, self.annotation_col_map = self.get_select() 40 self.col_count = len(self.select) 41 /home/ubuntu/moi/local/lib/python2.7/site-packages/django/db/models/sql/compiler.pyc in get_select(self) 185 if self.query.default_cols: 186 select_list = [] --> 187 c in self.get_default_columns(): 188 select_list.append(select_idx) 189 select.append((c, none)) /home/ubuntu/moi/local/lib/python2.7/site-packages/django/db/models/sql/compiler.pyc in get_default_columns(self, start_alias, opts, from_parent) 522 alias = self.query.join_parent_model(opts, model, start_alias, 523 seen_models) --> 524 column = field.get_col(alias) 525 result.append(column) 526 return result /home/ubuntu/moi/local/lib/python2.7/site-packages/django/db/models/fields/related.pyc in get_col(self, alias, output_field) 2015 2016 def get_col(self, alias, output_field=none): -> 2017 return super(foreignkey, self).get_col(alias, output_field or self.related_field) 2018 2019 /home/ubuntu/moi/local/lib/python2.7/site-packages/django/db/models/fields/related.pyc in related_field(self) 1895 @property 1896 def related_field(self): -> 1897 return self.foreign_related_fields[0] 1898 1899 def get_reverse_path_info(self): /home/ubuntu/moi/local/lib/python2.7/site-packages/django/db/models/fields/related.pyc in foreign_related_fields(self) 1629 @property 1630 def foreign_related_fields(self): -> 1631 return tuple(rhs_field lhs_field, rhs_field in self.related_fields) 1632 1633 def get_local_related_value(self, instance): /home/ubuntu/moi/local/lib/python2.7/site-packages/django/db/models/fields/related.pyc in related_fields(self) 1616 def related_fields(self): 1617 if not hasattr(self, '_related_fields'): -> 1618 self._related_fields = self.resolve_related_fields() 1619 return self._related_fields 1620 /home/ubuntu/moi/local/lib/python2.7/site-packages/django/db/models/fields/related.pyc in resolve_related_fields(self) 1601 raise valueerror('foreign object , fields must same non-zero length') 1602 if isinstance(self.rel.to, six.string_types): -> 1603 raise valueerror('related model %r cannot resolved' % self.rel.to) 1604 related_fields = [] 1605 index in range(len(self.from_fields)): valueerror: related model 'core_app_foobar.model_a' cannot resolved
try it:
class model_b(models.model): model_a = foreignkey('foobar.model_a')
don't forget inherit django models. (both)
from django.db import models
to refer models defined in application, can explicitly specify model full application label. example, if manufacturer model above defined in application called production, you’d need use:
Comments
Post a Comment