Ну, я очень плохо знаком с django, поэтому я легко заблудился. Я пытаюсь построить свою модель, используя мою sql модель в качестве эталона (я полагаю, что так люди и делают). Я решил большинство ошибок, но последняя убивает меня, и я не могу найти помощь по net. Это мой код:
from phone_field import PhoneField
# Create your models here.
class Room(models.Model):
number = models.IntegerField(primary_key=True, unique=True)
duration = models.IntegerField(default="3")
max_score = models.IntegerField(default="100")
name = models.CharField(max_length=30)
status = models.CharField(max_length=15, default="inactive")
class Credit(models.Model):
value = models.CharField(max_length=3)
class Language(models.Model):
name = models.CharField(max_length=20, default="chinese")
class Token(models.Model):
token_id = models.IntegerField(primary_key=True, unique=True)
class Level(models.Model):
value = models.IntegerField(default="1")
class Event(models.Model):
name = models.CharField(max_length=80)
phone_number = PhoneField(blank=True, help_text='Contact phone number')
date = models.DateTimeField('date of event')
members = models.IntegerField()
credit = models.ForeignKey(Credit, on_delete=models.DO_NOTHING)
language = models.ForeignKey(Language, on_delete=models.SET_DEFAULT, default="chinese")
level = models.ForeignKey(Level, on_delete=models.SET_DEFAULT, default="1")
class Team(models.Model):
name = models.CharField(max_length=80)
token_id = models.ForeignKey(Token, blank=True, null=True,on_delete=models.SET_NULL)
event_id = models.ForeignKey(Event, on_delete=models.CASCADE)
language = models.ForeignKey(Language, on_delete=models.SET_DEFAULT, default=Event.language)
level = models.ForeignKey(Level, on_delete=models.SET_DEFAULT, default=Event.level)
players_number = models.IntegerField(default="3")
end_time = models.DateTimeField()
activation_status = models.BooleanField(default=True)
active_room = models.ForeignKey(Room, blank=True, null=True,on_delete=models.SET_NULL)
total_score = models.IntegerField(default="0")
class ScoreTable(models.Model):
team_id = models.ForeignKey(Team,blank=True, null=True, on_delete=models.CASCADE)
room_number = models.ForeignKey(Room, blank=True, null=True,on_delete=models.CASCADE)
score = models.IntegerField(default="0")
time = models.DateTimeField('time of scoring', auto_now_add=True)
class BestScore(models.Model):
team_name = models.CharField(max_length=80)
total_score = models.IntegerField(default="0")
date = models.DateTimeField()
Когда я пытаюсь перенести мою модель, я получаю эту ошибку:
(mysite) MBPdeAlexandre:mysite nivren$ python manage.py makemigrations manager
Migrations for 'manager':
manager/migrations/0001_initial.py
- Create model BestScore
- Create model Credit
- Create model Event
- Create model Language
- Create model Level
- Create model Room
- Create model Token
- Create model Team
- Create model ScoreTable
- Add field language to event
- Add field level to event
Traceback (most recent call last):
File "manage.py", line 21, in <module>
main()
File "manage.py", line 17, in main
execute_from_command_line(sys.argv)
File "/Users/nivren/.virtualenvs/mysite/lib/python3.8/site-packages/django/core/management/__init__.py", line 401, in execute_from_command_line
utility.execute()
File "/Users/nivren/.virtualenvs/mysite/lib/python3.8/site-packages/django/core/management/__init__.py", line 395, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/Users/nivren/.virtualenvs/mysite/lib/python3.8/site-packages/django/core/management/base.py", line 328, in run_from_argv
self.execute(*args, **cmd_options)
File "/Users/nivren/.virtualenvs/mysite/lib/python3.8/site-packages/django/core/management/base.py", line 369, in execute
output = self.handle(*args, **options)
File "/Users/nivren/.virtualenvs/mysite/lib/python3.8/site-packages/django/core/management/base.py", line 83, in wrapped
res = handle_func(*args, **kwargs)
File "/Users/nivren/.virtualenvs/mysite/lib/python3.8/site-packages/django/core/management/commands/makemigrations.py", line 182, in handle
self.write_migration_files(changes)
File "/Users/nivren/.virtualenvs/mysite/lib/python3.8/site-packages/django/core/management/commands/makemigrations.py", line 219, in write_migration_files
migration_string = writer.as_string()
File "/Users/nivren/.virtualenvs/mysite/lib/python3.8/site-packages/django/db/migrations/writer.py", line 141, in as_string
operation_string, operation_imports = OperationWriter(operation).serialize()
File "/Users/nivren/.virtualenvs/mysite/lib/python3.8/site-packages/django/db/migrations/writer.py", line 99, in serialize
_write(arg_name, arg_value)
File "/Users/nivren/.virtualenvs/mysite/lib/python3.8/site-packages/django/db/migrations/writer.py", line 51, in _write
arg_string, arg_imports = MigrationWriter.serialize(item)
File "/Users/nivren/.virtualenvs/mysite/lib/python3.8/site-packages/django/db/migrations/writer.py", line 271, in serialize
return serializer_factory(value).serialize()
File "/Users/nivren/.virtualenvs/mysite/lib/python3.8/site-packages/django/db/migrations/serializer.py", line 37, in serialize
item_string, item_imports = serializer_factory(item).serialize()
File "/Users/nivren/.virtualenvs/mysite/lib/python3.8/site-packages/django/db/migrations/serializer.py", line 199, in serialize
return self.serialize_deconstructed(path, args, kwargs)
File "/Users/nivren/.virtualenvs/mysite/lib/python3.8/site-packages/django/db/migrations/serializer.py", line 86, in serialize_deconstructed
arg_string, arg_imports = serializer_factory(arg).serialize()
File "/Users/nivren/.virtualenvs/mysite/lib/python3.8/site-packages/django/db/migrations/serializer.py", line 336, in serializer_factory
raise ValueError(
ValueError: Cannot serialize: <django.db.models.fields.related_descriptors.ForwardManyToOneDescriptor object at 0x10a7d5310>
There are some values Django cannot serialize into migration files.
For more, see https://docs.djangoproject.com/en/3.0/topics/migrations/#migration-serializing
ОК, у меня есть внешний ключ "language", на который ссылается " Команда "и" событие ", и" событие "также упоминается в" команда ". Мне это показалось ясным: событие может быть настроено на языке, но одна из команд, участвующих в этом событии, может перегружать выбор языка, всегда выбирая из списка языков. Есть ли что-то, чего я не понял в философии модели django? Спасибо за помощь, а пока продолжу искать ответы :)