Как получить значение переменных по отдельности из свойства в Django - PullRequest
0 голосов
/ 05 мая 2020

Мне сложно сформулировать этот вопрос, поэтому я постараюсь показать, что я имею в виду.

У меня есть свойство

def count_tax_rate(self):
    if self.deposit_value > 100:
        Deposits.objects.update(tax_rate=self.tax_rate+10)
        return self.tax_rate + 10
count_tax_rate.short_description = "Tax rate"
tax_rate_property = property(count_tax_rate)

Затем я подключаю это свойство к своему admin.ModelAdmin form.

class DepositAdmin(admin.ModelAdmin):
    readonly_fields = ('temporary_deposit_income', 'temporary_total_income', 'tax_rate_property',
                       'deposit_creating_date', 'deposit_end_date')
    form = DepositForm

И в моей панели администратора это дает мне

Tax rate = 10

Но мне нужно вычислить и показать более одной переменной в моей панели администратора.

Я попытался переписать свою функцию свойства

def count_tax_rate(self):
    if self.deposit_value > 100:
        Deposits.objects.update(tax_rate=self.tax_rate+10, total_income=self.deposit_value+100)
        return self.tax_rate + 10, self.deposit_value + 100
count_tax_rate.short_description = "Tax rate"
tax_rate_property = property(count_tax_rate)

Но это дает мне это

Tax rate = (Decimal('10.00'), 200)

Я понимаю, что так работает свойство.

Есть ли способ получить несколько значений из одной функции свойств, или мне нужно искать совершенно другое решение?

PS. Мне нужны эти значения отдельно, поэтому я могу использовать их как разные поля в readonly_fields.

Ответы [ 2 ]

0 голосов
/ 05 мая 2020

Я считаю, что вы должны реализовать отношения между двумя моделями. Например, у вас может быть родительская таблица и дочерняя таблица, которая будет таблицей Deposit, и соединить родительскую таблицу с помощью Foreign Key с таблицей Deposit. Итак, теперь вы можете назначить множество депозитов индивидуально одному из родителей.

Надеюсь, это поможет. Пожалуйста, дайте мне знать, правильно ли я понял.

0 голосов
/ 05 мая 2020
def count_tax_rate(self):
    if self.deposit_value > 100:
        Deposits.objects.update(tax_rate=self.tax_rate+10, total_income=self.deposit_value+100)
        return f"Tax rate: {self.tax_rate + 10}, Deposit value: {self.deposit_value + 100}"

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

Я использую здесь f-строку, но вы можете построить строку по своему усмотрению.

...