我有一个‘Transaction’模型和ModelForm来创建一个:
class Transaction(models.Model):
""" Invoice model.
Represents a basic income/outcome transaction. """
title = models.CharField(max_length=32, verbose_name="Title")
category = models.ForeignKey(Category, related_name="transactions", on_delete=models.CASCADE, null=True, blank=True)
operation = models.CharField(max_length=8, choices=OPERATION_TYPE, verbose_name="operation")
value = models.DecimalField(max_digits=14, decimal_places=2, verbose_name="value")
currency = models.CharField(max_length=3, choices=CURRENCY_CHOICE, verbose_name="currency")
comment = models.CharField(max_length=255, null=True, blank=True)
date_created = models.DateField(auto_now_add=True, blank=True, null=True)
class Meta:
verbose_name_plural = "Transactions"
ordering = ["-date_created"]
class NewInvoiceForm(forms.ModelForm):
category = TreeNodeChoiceField(queryset=Category.objects.all())
class Meta:
model = Transaction
fields = ("title", "category", "operation", "value", "currency")
help_texts = {
"operation": _("Money spent/received. For expenses use a negative value.")
}
我有一个与每个用户链接的首选项模型来存储设置:
class Config(models.Model):
""" Represents user's preferences. """
user = models.OneToOneField(CustomUser, related_name="config", on_delete=models.CASCADE)
currency = models.CharField(max_length=3, choices=CURRENCY_CHOICE, default=DEFAULT_SETTINGS["currency"])
language = models.CharField(max_length=56, choices=LANGUAGE_CHOICE, default=DEFAULT_SETTINGS["language"])
class Meta:
verbose_name = "config"
verbose_name_plural = "configs"
我试图从Config
模型获得用户的货币作为Transaction
创建表单的初始值.但初始值永远不会呈现.
我的观点是:
def create_transaction_view(request):
if request.method == "POST":
form = NewInvoiceForm(
request.POST,
instance=request.user
)
if form.is_valid():
new_invoice = Transaction(**form.cleaned_data)
# retrieving user's currency preference for further converting if income is different from base currency
user_currency = request.user.config.currency
# performing currency conversion to maintain consistent data for statistic and analyse
if user_currency != new_invoice.currency:
transaction_converted_value = CurrencyExchangeManager.currency_converter(
value=new_invoice.value,
exchange_to=user_currency,
base=new_invoice.currency
)
new_invoice.value = transaction_converted_value
new_invoice.currency = user_currency
new_invoice.save()
return HttpResponseRedirect(request.META.get('HTTP_REFERER', "/"))
我总是得到一个‘破折号’字段作为初始 Select . 感谢您对此主题的任何建议.