модели конфликтуют с (МЕТА) наследованием

#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. Дэниел Роузман: как мне принять здесь ваше решение?