Source code for richy.coins.forms
from django import forms
from django.utils.translation import gettext as _
from karpet import Karpet
from ..core.forms import BaseUserItemForm
from .models import Coin
[docs]
class UserCoinForm(BaseUserItemForm):
item_model = Coin
coin_id = forms.CharField(
label=_("Coin ID"), help_text=_("GeckoCoin.com identifier.")
)
def __init__(self, user, *args, **kwargs):
super().__init__(user, *args, **kwargs)
if self.instance.pk:
self.fields["symbol"].widget.attrs["readonly"] = True
self.fields["symbol"].initial = self.instance.item.symbol
self.fields["coin_id"].widget.attrs["readonly"] = True
self.fields["coin_id"].initial = self.instance.item.coin.coin_id
[docs]
def clean(self):
cleaned_data = super().clean()
symbol = cleaned_data.get("symbol")
coin_id = cleaned_data.get("coin_id")
# User didn't specified coin ID. We try to look for
# the ID based on symbol. If we find more than 1 ID
# we raise an error - user needs to specify ID.
if not symbol:
return cleaned_data
coin_ids = Karpet().get_coin_slugs(symbol)
if not coin_id and 1 < len(coin_ids):
self.add_error(
"coin_id", _("Coin has ambiguous symbol. Please enter coin ID.")
)
# 1. Did we found anything?
# 2. Does the entered coin ID equals what we found?
if not coin_ids or (coin_id and coin_id not in coin_ids):
self.add_error("coin_id", "Coin ID wasn't found.")
return cleaned_data