def clean(self, val): """ Turns the entered value (a tailnumber or a pk), into a plane instance """ if val == '' or val is None or val == '90': ## if input was blank, get and return the global unknown plane return Plane.objects.get(pk=settings.UNKNOWN_PLANE_ID) if re.match(r'^[0-9]+$', val): try: # most likely a PK return Plane.objects.user(self.user)\ .filter(retired=False, pk=val)[0] except IndexError: # but could also be a all numeric tailnumber return Plane.objects.user(self.user)\ .filter(retired=False, tailnumber=val)[0] if val.startswith("pk:"): pk = val[3:] p = Plane.goon(pk=pk, user=self.user) if p: return p else: return Plane.objects.get(pk=settings.UNKNOWN_PLANE_ID) elif " " in val: tn, ty = val.split(' ')[:2] ty = ty.upper() kwarg = {"tailnumber": tn, "user": self.user, "type": ty} else: tn = val kwarg = {"tailnumber": tn, "user": self.user} try: return Plane.objects.filter(retired=False, **kwarg)[0] except IndexError: # couldn't find airplane, it either doesn't exist, or it's retired return Plane.objects.create(**kwarg)