*slightly* better would be: class X(models.Model): YES='Y' NO='N' DEFAULT='D' TO_USE = ((X.YES, "Yes"), (X.NO, "No"), (X.DEFAULT, "Default"))
txt= models.CharField(db_index=True,null=True, blank=True,max_length=30) use_txt= models.CharField(blank=False,max_length=1,default='D', choices=X.TO_USE) and in admin.py class XForm(forms.ModelForm): def clean(self): cleaned_data=super(XForm, self).clean() txt=cleaned_data['txt'].strip() use_txt=cleaned_data['use_txt'].strip() if *not txt* and use_txt==X.YES: raise forms.ValidationError('This is needed!') return cleaned_data On Wed, Feb 1, 2012 at 8:13 PM, Nikolas Stevenson-Molnar < nik.mol...@consbio.org> wrote: > You could use a class, such as: > > class TO_USE: > Y = 'Yes' > N = 'No' > > if char == TO_USE.Y: > pass > > _Nik > > > On 2/1/2012 1:45 PM, NENAD CIKIC wrote: > > Hello, the subject expresses my discomfort with certain python > characteristics, given my background, and my lack of python knowledge. > Specifically lets say that I have a model with a Text field and char > field. The char field is length 1 and says "use or do not use the text > field". The char field can have Y or N values. > So using the admin interface I wanted to override the clean method but I > did not want to write > if text.__len__==0 and char=='Y': > raise exception > > In C/C++ you would use enum for these sort of things. So I ended with > defining in models.py something as: > TO_USE= ( > ('Y', 'Yes'), > ('N', 'No'), > ) > > class X(models.Model): > txt= models.CharField(db_index=True,null=True, > blank=True,max_length=30) > use_txt= > models.CharField(blank=False,max_length=1,default='D',choices=TO_USE) > > and in admin.py something as > class XForm(forms.ModelForm): > def clean(self): > cleaned_data=super(XForm, self).clean() > txt= cleaned_data['txt'].strip() > use_txt=cleaned_data['use_txt'].strip() > > if txt.__len__()==0 and use_txt==TO_USE.__getitem__(0)[0]: > raise forms.ValidationError('This is needed!') > > return cleaned_data > > The part .__getitem__(0)[0] is not very readable. I have looked for enums > in python, and if I have understood well, it seems they are not implemented. > What is the best way to do it in python for my problem, given that I do > not want to write =='Y'. > Thanks > Nenad > > -- > You received this message because you are subscribed to the Google Groups > "Django users" group. > To view this discussion on the web visit > https://groups.google.com/d/msg/django-users/-/oqGo6Td_lYoJ. > To post to this group, send email to django-users@googlegroups.com. > To unsubscribe from this group, send email to > django-users+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/django-users?hl=en. > > -- > You received this message because you are subscribed to the Google Groups > "Django users" group. > To post to this group, send email to django-users@googlegroups.com. > To unsubscribe from this group, send email to > django-users+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/django-users?hl=en. > -- You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-users@googlegroups.com. To unsubscribe from this group, send email to django-users+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-users?hl=en.