#python #django #django-models
#python #django #django-модели
Вопрос:
в проекте django у меня несколько приложений, и общее содержит следующие модели:
class CLDate(models.Model):
class Meta:
abstract = True
active = models.BooleanField(default=True)
last_modified = models.DateTimeField(auto_now=True)
created = models.DateTimeField(auto_now_add=True)
class Switch(CLDate):
name = models.CharField(max_length=64)
code = models.CharField(max_length=64, blank=True, null=True)
description = models.TextField(blank=True, null=True)
sorted = models.IntegerField(default=0)
class Currency(Switch):
pass
В другом приложении я импортирую Switch и пытаюсь добавить ForeignKey к модели, которая также наследуется от Switch
class Country(Switch):
...
currency = models.ForeignKey(Currency, on_delete=models.CASCADE)
...
.
Запуск makemigration или что-нибудь с помощью manage.py я получаю следующую ошибку:
SystemCheckError: System check identified some issues:
ERRORS:
ads.Country.currency: (models.E006) The field 'currency' clashes with the
field 'currency' from model 'common.switch'.
Почему я получаю эту ошибку и как я могу ее устранить? Я имею в виду, что на уровне базы данных это должен быть только «указатель» на модель / объект валюты и не должен иметь отношения к его типу. Конечно, если я изменю тип наследования валюты на что-то другое, все будет работать нормально.
Django: 2.2 python: 3.5.3
.
Комментарии:
1. В чем смысл валюты? Действительно ли это просто пустая модель, которая переключает подклассы? Кажется, что либо Currency должна быть прокси-моделью, либо Switch также должен быть абстрактным.
2. Правда, я не знаю, почему Switch не был также абстрактным, он должен был быть. Спасибо.
3. Дэниел Роузман: как мне принять здесь ваше решение?