#python #django #migration #django-polymorphic
#python #django #миграция #django-полиморфный
Вопрос:
Я пытаюсь обновить свое приложение для использования django-polymorphic
. Я получаю ошибку, которую я действительно не понимаю при попытке выполнить миграцию. Я только что перешел DashableModel
на наследование от PolymorphicModel
вместо models.Model
и понятия не имею, как подойти к этой ошибке.
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/root/.virtualenvs/mysite/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 351, in execute_from_command_line
utility.execute()
File "/root/.virtualenvs/mysite/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 325, in execute
django.setup()
File "/root/.virtualenvs/mysite/local/lib/python2.7/site-packages/django/__init__.py", line 18, in setup
apps.populate(settings.INSTALLED_APPS)
File "/root/.virtualenvs/mysite/local/lib/python2.7/site-packages/django/apps/registry.py", line 108, in populate
app_config.import_models(all_models)
File "/root/.virtualenvs/mysite/local/lib/python2.7/site-packages/django/apps/config.py", line 198, in import_models
self.models_module = import_module(models_module_name)
File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)
File "/srv/www/apps/jobboard/models.py", line 280, in <module>
class JobPost(SiteModel, OrderableMixIn, DashableModel):
File "/root/.virtualenvs/mysite/local/lib/python2.7/site-packages/django/db/models/base.py", line 189, in __new__
new_class.add_to_class(obj_name, obj)
File "/root/.virtualenvs/mysite/local/lib/python2.7/site-packages/django/db/models/base.py", line 324, in add_to_class
value.contribute_to_class(cls, name)
File "/root/.virtualenvs/mysite/local/lib/python2.7/site-packages/django/db/models/fields/related.py", line 2549, in contribute_to_class
self.rel.through = create_many_to_many_intermediary_model(self, cls)
File "/root/.virtualenvs/mysite/local/lib/python2.7/site-packages/django/db/models/fields/related.py", line 2106, in create_many_to_many_intermediary_model
db_constraint=field.rel.db_constraint,
File "/root/.virtualenvs/mysite/local/lib/python2.7/site-packages/django/db/models/base.py", line 189, in __new__
new_class.add_to_class(obj_name, obj)
File "/root/.virtualenvs/mysite/local/lib/python2.7/site-packages/django/db/models/base.py", line 324, in add_to_class
value.contribute_to_class(cls, name)
File "/root/.virtualenvs/mysite/local/lib/python2.7/site-packages/django/db/models/fields/related.py", line 1772, in contribute_to_class
super(ForeignObject, self).contribute_to_class(cls, name, virtual_only=virtual_only)
File "/root/.virtualenvs/mysite/local/lib/python2.7/site-packages/django/db/models/fields/related.py", line 313, in contribute_to_class
add_lazy_relation(cls, self, other, resolve_related_class)
File "/root/.virtualenvs/mysite/local/lib/python2.7/site-packages/django/db/models/fields/related.py", line 86, in add_lazy_relation
operation(field, model, cls)
File "/root/.virtualenvs/mysite/local/lib/python2.7/site-packages/django/db/models/fields/related.py", line 312, in resolve_related_class
field.do_related_class(model, cls)
File "/root/.virtualenvs/mysite/local/lib/python2.7/site-packages/django/db/models/fields/related.py", line 355, in do_related_class
self.set_attributes_from_rel()
File "/root/.virtualenvs/mysite/local/lib/python2.7/site-packages/django/db/models/fields/related.py", line 345, in set_attributes_from_rel
self.rel.set_field_name()
File "/root/.virtualenvs/mysite/local/lib/python2.7/site-packages/django/db/models/fields/related.py", line 1426, in set_field_name
self.field_name = self.field_name or self.to._meta.pk.name
AttributeError: 'NoneType' object has no attribute 'name'
models.py
class DashableModel(PolymorphicModel, StarrableMixin):
featured = models.BooleanField(default=False)
sponsored = models.BooleanField(default=False)
@property
def sponsored_by_text(self):
return "Sponsored"
class Meta:
abstract = True
class JobPost(SiteModel, OrderableMixIn, DashableModel):
title = models.CharField(max_length=200)
slug = models.SlugField(unique=True, max_length=100, blank=True)
status = models.CharField(max_length=4, choices=JOB_POST_PUB_STATUS)
topics = models.ManyToManyField(Topic, blank=True)
# Relevant Information
start_date = models.DateField()
end_date = models.DateField()
tier = models.IntegerField(blank=False, default=0)
stickied_until = models.DateField(blank=True, null=True)
# Newsletter start/end dates
ns_start_date = models.DateField(blank=True, null=True, help_text="Start appearing in newsletter on this date")
ns_end_date = models.DateField(blank=True, null=True, help_text="Last date that it appears in newsletter")
date_created = models.DateField(auto_now_add=True)
date_last_updated = models.DateField(blank=True, null=True)
ip_created = models.GenericIPAddressField(blank=True, null=True)
ip_last_updated = models.GenericIPAddressField(blank=True, null=True)
company_name = models.CharField(max_length=200)
company_url = models.URLField(blank=True, null=True, )
job_type = models.CharField(blank=False, null=False, max_length=20, choices=JOB_TYPE)
teaser = models.TextField(blank=True, default="")
company_description = RichTextField(blank=True, config_name='baby_with_lists')
job_description = RichTextField(blank=True, config_name='baby_with_lists')
qualifications = RichTextField(blank=True, config_name='baby_with_lists')
application_instructions = RichTextField(blank=True, config_name='baby_with_lists')
apply_url = models.URLField(blank=True, null=True, )
apply_email = models.EmailField(blank=True, null=True)
country = models.CharField(max_length=200, default='USA', choices=COUNTRIES)
city = models.CharField(max_length=200, blank=True, null=True, help_text='City, Town or Neighborhood')
usa_state = us_models.USStateField(blank=True, null=True)
# address = models.CharField(max_length=200, blank=True, null=True)
#The person who posted the job
poster_name = models.CharField(max_length=200, null=True, blank=True)
poster_email = models.EmailField(null=True, blank=True)
poster_phone = us_models.PhoneNumberField(blank=True, null=True)
#Credit Card Info
cc_last_four = models.CharField(max_length=4, blank=True, null=True)
cc_receipt = models.CharField(max_length=200, blank=True, null=True)
cc_name = models.CharField(max_length=200, blank=True, null=True)
stripe_token = models.CharField(max_length=200, blank=True, null=True)
stripe_customer_id = models.CharField(max_length=200, blank=True, null=True)
stripe_notes = models.TextField(blank=True, null=True)
last_charged = models.DateTimeField(blank=True, null=True)
# Hash for edit url
edit_token = models.CharField(max_length=150, blank=True, null=True, unique=True, default=None)
# For jobs coming from a feed:
from_feed = models.ForeignKey(JobFeed, null=True, blank=True)
# Name of job source e.g. 'acullen'
from_source = models.CharField(max_length=100, null=True, blank=True)
objects = getSiteManager()
all_sites = models.Manager()
live_posts = LiveJobPostManager()
Комментарии:
1. пожалуйста, опубликуйте соответствующий раздел вашей модели
2. @e4c5 Можете ли вы сказать мне, что вы ищете? Модель довольно большая (я могу опубликовать все это, если это полезно). Я не понимаю ошибки или как ее вообще отлаживать.
3. модель, которая находится в строке 280
4. @e4c5 Хорошо, это большая модель, наследуемая от ряда вещей, поэтому я хочу убедиться, что я включил то, что вы ищете. Добавлено; дайте мне знать, если вам нужно больше.
5. глядя на эту таблицу, я вижу, что у вас гораздо большая проблема. Ваши данные не нормализованы. Вам нужно сделать это, прежде чем делать что-либо еще. Вероятно, вы обнаружите, что вам даже не нужен django- polymorphic