как получить правильный атрибут для Мета-класса?

#python-3.x #django #postgresql #django-models #pgadmin

Вопрос:

после выполнения команды python manage.py inspectdb, у меня возникла следующая ошибка

Ошибка типа: «Мета-класс» получил недопустимые атрибуты: ifsc,банк,филиал,адрес,город,район,штат

моя модель выглядит следующим образом

 from django.db import models
class Banks(models.Model):

    class Meta:
        db_table = 'banks'

        name = models.CharField(max_length=49, blank=True, null=True)
        id = models.BigIntegerField(primary_key=True)
    class Meta:
        managed = False
        db_table = 'branches'
        ifsc = models.CharField(primary_key=True, max_length=11)
        bank = models.ForeignKey('Banks', models.DO_NOTHING, blank=True, null=True)
        branch = models.CharField(max_length=250, blank=True, null=True)
        address= models.CharField(max_length=250, blank=True, null=True)
        city = models.CharField(max_length=50, blank=True, null=True)
        district = models.CharField(max_length=50, blank=True, null=True)
        state = models.CharField(max_length=26, blank=True, null=True)
 

Комментарии:

1. поля модели должны находиться в классе модели, а не в ее Meta классе. Также два определения Meta не будут работать… Это действительно результат inspectdb , или вы отредактировали его таким образом?

2. Вы не должны указывать поля базы данных в Meta классе, только мета-параметры.

3. Inspectdb произвел это? Это звучит очень странно, так как выглядит неправильно отформатированным/с отступом. Вы изменили выходные данные inspectdb? Вы перенаправили его вывод на models.py файл (т. е. python manage.py inspectdb > models.py )?

4. два мета были выводом inspectdb. я перепутал вещи, чтобы выяснить, могу ли я избавиться от ошибки. спасибо, что предоставленное вами решение сработало. @АбдулАзизБаркат

5. @jay inspectdb не должен давать такой вывод (он должен был дать вам 2 класса моделей со своими собственными Meta )… В любом случае, если вы говорите об ответе ниже, он был дан Виллемом, а не мной, я только немного отредактировал его, чтобы удалить текст, который был ошибочно скопирован с вопроса, примите ответ, если он решил вашу проблему.

Ответ №1:

Похоже, вы сделали отступ неправильно. Поля задаются на уровне класса, поэтому:

 from django.db import models

class Banks(models.Model):
    #↓ Banks class attributes
    id = models.BigIntegerField(primary_key=True)
    # ↓ Banks class attributes
    name = models.CharField(max_length=49, blank=True, null=True)
    
    class Meta:
        db_table = 'banks' 

что касается второй меты, то она должна принадлежать другому классу моделей.