class Advert(models.Model):
location_relation = models.ForeignKey("administrative_division.Towns", to_field='name_unique')
class Towns(models.Model):
name = models.CharField(max_length=128)
slug = models.SlugField()
voivodship = models.ForeignKey("Voivodships", to_field='voivodship_identifier')
county = models.ForeignKey("Counties")
name_unique=models.CharField(max_length=255, unique=True)
town_unique=models.BooleanField()
def __unicode__(self):
return "%s. %s"% (self.id, self.name)
class AdvertForm(ModelForm):
category = CustomTreeNodeChoiceField(queryset=Category.objects.filter(parent__isnull=False), empty_label="Wybierz kategorię", label="Kategoria")
class Meta:
model = Advert
exclude = ('ip', 'user')
widgets = {
'location_relation': TextInput
}
def __init__(self, *args, **kwargs):
self.request = kwargs.pop('request', None)
super(AdvertForm, self).__init__(*args, **kwargs)
def clean_location_relation(self):
from string import capitalize
from django import forms
from administrative_division.models import Towns
cleaned_data = self.cleaned_data['location_relation']
try:
cleaned_data = Towns.objects.get(name_unique=capitalize(cleaned_data.name_unique))
except:
raise forms.ValidationError("Such city does not exist")
return cleaned_data
選択フィールドの代わりにテキスト入力フォームフィールドを使用します。したがって、一意の名前を手動で指定する必要があります。
私が必要としているのは、location_relationという名前のフィールドに提供された文字列を大文字にすることです。モデルでcleanメソッドを使用するなど、さまざまなオプションを試しましたが、モデル形式でcleanを試しました。
現時点ではどうすればいいのかよくわかりません。
この問題のヒントまたは解決策を教えてください:)