Django RelatedObjectDoesNotExits - в методе инициализации модели - установка значений работает с одним объектом ForeignKey, но не с другим - PullRequest
0 голосов
/ 20 марта 2020

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

class Change(models.Model):
    account = models.ForeignKey(Account, on_delete=models.CASCADE, related_name="changes")
    date = models.DateTimeField()
    category = models.ForeignKey(Category, related_name="changes", null=True,
                                 on_delete=models.SET_NULL)
    description = models.TextField(blank=True)
    change = models.DecimalField(decimal_places=2, max_digits=15)
    # query optimization
    balance = models.DecimalField(max_digits=15, decimal_places=2, null=True, blank=True)
    # for checks on save
    __account = None
    __category = None
    __date = None
    __change = None

    def __init__(self, *args, **kwargs):
        super(Change, self).__init__(*args, **kwargs)
        self.__date = self.date
        self.__category = self.category
        self.__account = self.account
        self.__change = self.change

В методе init я получаю следующую ошибку при попытке добавить новое изменение через форму:

File "/home/daniel/Data/Tortuga-Webdesign/Kunden_und_Projekte/0000/finance_project/finance/finance/banking/models.py", line 205, in __init__
    self.__account = self.account
  File "/home/daniel/Data/Tortuga-Webdesign/Kunden_und_Projekte/0000/finance_project/venv/lib/python3.7/site-packages/django/db/models/fields/related_descriptors.py", line 197, in __get__
    "%s has no %s." % (self.field.model.__name__, self.field.name)
finance.banking.models.Change.account.RelatedObjectDoesNotExist: Change has no account.

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

class ChangeForm(forms.ModelForm):
    date = forms.DateTimeField(widget=forms.DateTimeInput(attrs={"type": "datetime-local"},
                                                          format="%Y-%m-%dT%H:%M"),
                               input_formats=["%Y-%m-%dT%H:%M"], label="Date")

    class Meta:
        model = Change
        fields = (
            "account",
            "date",
            "category",
            "description",
            "change"
        )

    def __init__(self, depot, *args, **kwargs):
        super(ChangeForm, self).__init__(*args, **kwargs)
        self.fields["account"].queryset = depot.accounts.all()
        self.fields["category"].queryset = depot.categories.all()
        self.fields["date"].initial = datetime.now()

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

class AddChangeIndexView(LoginRequiredMixin, CustomGetFormMixin, CustomAjaxFormMixin, generic.CreateView):
    model = Change
    form_class = ChangeForm
    template_name = "modules/form_snippet.njk"

Почему я получаю эту ошибку с учетной записью, но не с категорией? Форма не имеет исходного набора данных, за исключением даты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...