python - Django Related model cannot be resolved -


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:

doc foreignkey


Comments