def test_get_value_on_delete(self): # First validate the FK fields with on_delete options o_set_null_on_delete = HorribleModel._meta.get_field_by_name("o_set_null_on_delete")[0] o_cascade_delete = HorribleModel._meta.get_field_by_name("o_cascade_delete")[0] o_protect = HorribleModel._meta.get_field_by_name("o_protect")[0] o_default_on_delete = HorribleModel._meta.get_field_by_name("o_default_on_delete")[0] o_set_on_delete_function = HorribleModel._meta.get_field_by_name("o_set_on_delete_function")[0] o_set_on_delete_value = HorribleModel._meta.get_field_by_name("o_set_on_delete_value")[0] o_no_action_on_delete = HorribleModel._meta.get_field_by_name("o_no_action_on_delete")[0] # TODO this is repeated from the introspection_details in modelsinspector: # better to refactor that so we can reference these settings, in case they # must change at some point. on_delete = [ "rel.on_delete", {"default": models.CASCADE, "is_django_function": True, "converter": convert_on_delete_handler}, ] # Foreign Key cascade update/delete self.assertRaises(IsDefault, get_value, o_cascade_delete, on_delete) self.assertEqual(get_value(o_protect, on_delete), "models.PROTECT") self.assertEqual(get_value(o_no_action_on_delete, on_delete), "models.DO_NOTHING") self.assertEqual(get_value(o_set_null_on_delete, on_delete), "models.SET_NULL") self.assertEqual(get_value(o_default_on_delete, on_delete), "models.SET_DEFAULT") # For now o_set_on_delete raises, see modelsinspector.py # self.assertEqual( # get_value(o_set_on_delete_function, on_delete), # "models.SET(get_sentinel_object)", # ) self.assertRaises(ValueError, get_value, o_set_on_delete_function, on_delete) self.assertEqual( get_value(o_set_on_delete_value, on_delete), "models.SET(%s)" % value_clean(get_sentinel_object()) )
def test_get_value_on_delete(self): # First validate the FK fields with on_delete options o_set_null_on_delete = HorribleModel._meta.get_field_by_name("o_set_null_on_delete")[0] o_cascade_delete = HorribleModel._meta.get_field_by_name("o_cascade_delete")[0] o_protect = HorribleModel._meta.get_field_by_name("o_protect")[0] o_default_on_delete = HorribleModel._meta.get_field_by_name("o_default_on_delete")[0] o_set_on_delete_function = HorribleModel._meta.get_field_by_name("o_set_on_delete_function")[0] o_set_on_delete_value = HorribleModel._meta.get_field_by_name("o_set_on_delete_value")[0] o_no_action_on_delete = HorribleModel._meta.get_field_by_name("o_no_action_on_delete")[0] # TODO this is repeated from the introspection_details in modelsinspector: # better to refactor that so we can reference these settings, in case they # must change at some point. on_delete = ["rel.on_delete", {"default": models.CASCADE, "is_django_function": True, "converter": convert_on_delete_handler, }] # Foreign Key cascade update/delete self.assertRaises( IsDefault, get_value, o_cascade_delete, on_delete, ) self.assertEqual( get_value(o_protect, on_delete), "models.PROTECT", ) self.assertEqual( get_value(o_no_action_on_delete, on_delete), "models.DO_NOTHING", ) self.assertEqual( get_value(o_set_null_on_delete, on_delete), "models.SET_NULL", ) self.assertEqual( get_value(o_default_on_delete, on_delete), "models.SET_DEFAULT", ) # For now o_set_on_delete raises, see modelsinspector.py #self.assertEqual( # get_value(o_set_on_delete_function, on_delete), # "models.SET(get_sentinel_object)", #) self.assertRaises( ValueError, get_value, o_set_on_delete_function, on_delete, ) self.assertEqual( get_value(o_set_on_delete_value, on_delete), "models.SET(%s)" % value_clean(get_sentinel_object()), )
def add_one_time_default(self, field, field_def): # OK, they want to pick their own one-time default. Who are we to refuse? print(" ? Please enter Python code for your one-off default value.") print(" ? The datetime module is available, so you can do e.g. datetime.date.today()") while True: code = raw_input(" >>> ") if not code: print(" ! Please enter some code, or 'exit' (with no quotes) to exit.") elif code == "exit": sys.exit(1) else: try: result = eval(code, {}, {"datetime": datetime_utils}) except (SyntaxError, NameError) as e: print(" ! Invalid input: %s" % e) else: break # Right, add the default in. field_def[2]['default'] = value_clean(result)
print " ? The datetime module is available, so you can do e.g. datetime.date.today()" while True: code = raw_input(" >>> ") if not code: print " ! Please enter some code, or 'exit' (with no quotes) to exit." elif code == "exit": sys.exit(1) else: try: result = eval(code, {}, {"datetime": datetime_utils}) except (SyntaxError, NameError), e: print " ! Invalid input: %s" % e else: break # Right, add the default in. field_def[2]['default'] = value_clean(result) def irreversable_code(self, field): return self.IRREVERSIBLE_TEMPLATE % { "model_name": self.model._meta.object_name, "table_name": self.model._meta.db_table, "field_name": field.name, "field_column": field.column, } class AddField(Action, _NullIssuesField): """ Adds a field to a model. Takes a Model class and the field name. """