Ошибка Django на формах при запуске makemigrations

Я получаю следующую ошибку при попытке создать миграции для моих моделей. Это происходит на чистой БД, поэтому она пытается сгенерировать начальные миграции.

File "/Users/luketimothy/Library/Mobile Documents/com~apple~CloudDocs/LifePlanner/LifePlanner/LifePlanner/urls.py", line 20, in <module>
    from . import views
  File "/Users/luketimothy/Library/Mobile Documents/com~apple~CloudDocs/LifePlanner/LifePlanner/LifePlanner/views.py", line 7, in <module>
    from .forms import AppUserForm, IncomeSourceForm, AccountForm, SpouseForm, DependentForm
  File "/Users/luketimothy/Library/Mobile Documents/com~apple~CloudDocs/LifePlanner/LifePlanner/LifePlanner/forms.py", line 32, in <module>
    class AccountForm(forms.ModelForm):
  File "/Users/luketimothy/Library/Mobile Documents/com~apple~CloudDocs/LifePlanner/LifePlanner/ProjectEnv/lib/python3.11/site-packages/django/forms/models.py", line 312, in __new__
    fields = fields_for_model(
             ^^^^^^^^^^^^^^^^^
  File "/Users/luketimothy/Library/Mobile Documents/com~apple~CloudDocs/LifePlanner/LifePlanner/ProjectEnv/lib/python3.11/site-packages/django/forms/models.py", line 237, in fields_for_model
    formfield = f.formfield(**kwargs)
                ^^^^^^^^^^^^^^^^^^^^^
  File "/Users/luketimothy/Library/Mobile Documents/com~apple~CloudDocs/LifePlanner/LifePlanner/ProjectEnv/lib/python3.11/site-packages/django/db/models/fields/related.py", line 1165, in formfield
    "queryset": self.remote_field.model._default_manager.using(using),
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'using'

Вот форма в моем файле forms.py:

class AccountForm(forms.ModelForm):
    class Meta:
        model = Account
        fields = ['account_name','owner','account_provider','balance']
        labels = {'account_name': 'Name','account_provider': 'Account Provider','balance': 'Balance','owner': 'Owner'}

А вот соответствующие Модели в models.py:

class Projectable(models.Model):
    class Meta:
        abstract = True

    def project_annual_values(self, years):
        raise NotImplementedError("Subclasses should implement this method.")

    def project_monthly_values(self, months):
        raise NotImplementedError("Subclasses should implement this method.")

class AccountProvider(models.Model):
    name = models.CharField(max_length=64)
    web_url = models.CharField(max_length=256)
    login_url = models.CharField(max_length=256)
    logo_file= models.CharField(max_length=64)
    
    def __str__(self):
        return f"{self.name}"

class Account(Projectable):
    account_name = models.CharField(max_length=100)
    balance = models.DecimalField(max_digits=15, decimal_places=2)
    owner = models.ForeignKey(Agent, on_delete=models.CASCADE)
    account_provider = models.ForeignKey(AccountProvider, on_delete=models.SET_NULL)

    def get_balance(self):
        return self.balance

    def get_account_type(self):
        raise NotImplementedError("Subclasses should implement this method.")

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

Это происходит потому, что для поля account provider в модели account в параметре on_delete=models.SET_NULL вы устанавливаете значение поля в null при удалении, но не указали, разрешены ли null-значения. По умолчанию django не допускает нулевых значений для полей, но вы можете сделать это, добавив параметр null=True перед on_delete=models.SET_NULL, чтобы это работало.

class Account(Projectable):
    account_name = models.CharField(max_length=100)
    balance = models.DecimalField(max_digits=15, decimal_places=2)
    owner = models.ForeignKey(Agent, on_delete=models.CASCADE)
    account_provider = models.ForeignKey(AccountProvider, null=True, on_delete=models.SET_NULL)

    def get_balance(self):
        return self.balance

    def get_account_type(self):
        raise NotImplementedError("Subclasses should implement this method.")

Вернуться на верх