Django 3.0.9 сообщение об ошибке course.File.file: (models.E006) Поле «файл» конфликтует с полем «файл» из модели «курсы.itembase» - PullRequest
0 голосов
/ 07 августа

Я учу себя Django с помощью книги Django 3 на примере Я прошелся по книге и столкнулся с сообщением об ошибке

Курсы с сообщениями об ошибке.File.file: ( models.E006) Поле 'файл' конфликтует с полем 'файл' из модели 'course.itembase'. и

classes.Image.file: (models.E006) Поле 'file' конфликтует с полем 'file' из модели 'course.itembase'

Я использовал документацию Здесь , и правильно ли я понимаю, что «поля модели. Каждое поле указано как атрибут класса, и каждый атрибут отображается в столбец базы данных». В моем случае «файл класса» и «изображение класса» совместно используют атрибут «файл», который добавляется как столбец базы данных. Глядя на другие решения, я попытался переименовать атрибут и столкнулся с запросом на

  1. Теперь укажите одноразовое значение по умолчанию (будет установлено для всех существующих строк с нулевым значением для этот столбец)

  2. Закройте и позвольте мне добавить значение по умолчанию в models.py

Означает ли это, что в базе данных есть два столбца с именем «файл», который я должен идентифицировать с помощью уникального атрибута. Глядя на документацию, я вижу, что правильно использовал Models.Filefield Здесь , не могли бы вы подсказать мне документацию о том, как добавить значение по умолчанию для этой ошибки в models.py?

class ItemBase(models.Model):
    owner = models.ForeignKey(User,
                              related_name='%(class)s_related',
                              on_delete=models.CASCADE)
    title = models.CharField(max_length=250)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)

def render(self):
        return render_to_string(
            f'courses/content/{self._meta.model_name}.html',
            {'item': self})

class Meta:
    abstract = True

def __str__(self):
        return self.title

class Text(ItemBase):
    content = models.TextField()

class File(ItemBase):
        file = models.FileField(upload_to='files')

class Image(ItemBase):
        file = models.FileField(upload_to='images')

class Video(ItemBase):
        url = models.URLField()

1 Ответ

0 голосов
/ 07 августа

вы не можете установить одно и то же связанное имя в более одной модели в django, поэтому вам нужно изменить свое связанное имя на что-то вроде этого, иначе это не сработает, тогда вам нужно поставить это вручную во всех классах с разными связанными именами

owner = models.ForeignKey(User, related_name="%(app_label)s_%(class)s", on_delete=models.CASCADE)
 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...