Ошибка 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.")