@@ -244,7 +244,7 @@ def test_custom_field_base_model_set_choice_value(self) -> None:
244244 field_type = CustomField .FIELD_TYPES .CHAR ,
245245 choice_field = True ,
246246 )
247- choice_1 = CustomValueFactory (field = field , label = "Choice 1" , value = "choice_1" )
247+ choice_1 : CustomValue = CustomValueFactory (field = field , label = "Choice 1" , value = "choice_1" ) # type: ignore
248248
249249 # we need to annotate the custom_field_keys manually or to fetch the person with the queryset again,
250250 # because we created a new field
@@ -277,9 +277,9 @@ def test_custom_field_base_model_set_multiple_choice_value(
277277 choice_field = True ,
278278 multiple = True ,
279279 )
280- choice_1 = CustomValueFactory (field = field , value = "2000-01-01" )
281- choice_2 = CustomValueFactory (field = field , value = "2001-01-01" )
282- choice_3 = CustomValueFactory (field = field , value = "2002-01-01" )
280+ choice_1 : CustomValue = CustomValueFactory (field = field , value = "2000-01-01" ) # type: ignore
281+ choice_2 : CustomValue = CustomValueFactory (field = field , value = "2001-01-01" ) # type: ignore
282+ choice_3 : CustomValue = CustomValueFactory (field = field , value = "2002-01-01" ) # type: ignore
283283
284284 # we need to annotate the custom_field_keys manually or to fetch the person with the queryset again,
285285 # because we created a new field
@@ -307,3 +307,116 @@ def test_custom_field_base_model_set_multiple_choice_value(
307307 ],
308308 Person .objects .first ().multiple_choice_value ,
309309 )
310+
311+ def test_custom_field_base_model_remove_text_value (self ) -> None :
312+ CustomFieldFactory (
313+ identifier = "text_value" ,
314+ content_type = self .person_ct ,
315+ field_type = CustomField .FIELD_TYPES .TEXT ,
316+ )
317+
318+ # we need to annotate the custom_field_keys manually or to fetch the person with the queryset again,
319+ # because we created a new field
320+ self .person .refresh_with_custom_fields ()
321+
322+ self .assertEqual (0 , CustomValue .objects .count ())
323+
324+ self .person .text_value = "Text value"
325+ self .person .save ()
326+
327+ self .assertEqual (1 , CustomValue .objects .count ())
328+ self .assertEqual ("Text value" , self .person .text_value )
329+
330+ self .person .text_value = None
331+ self .person .save ()
332+
333+ self .assertEqual (0 , CustomValue .objects .count ())
334+ self .assertIsNone (self .person .text_value )
335+
336+ def test_custom_field_base_model_remove_choice_value (self ) -> None :
337+ field = CustomFieldFactory (
338+ identifier = "choice_value" ,
339+ content_type = self .person_ct ,
340+ field_type = CustomField .FIELD_TYPES .CHAR ,
341+ choice_field = True ,
342+ )
343+
344+ # we need to annotate the custom_field_keys manually or to fetch the person with the queryset again,
345+ # because we created a new field
346+ self .person .refresh_with_custom_fields ()
347+
348+ choice_1 : CustomValue = CustomValueFactory (field = field , label = "Choice 1" , value = "choice_1" ) # type: ignore
349+ self .person .choice_value = choice_1
350+ self .person .save ()
351+
352+ self .assertEqual (1 , CustomValue .objects .count ())
353+ self .assertEqual (1 , self .person .custom_values .count ())
354+ self .assertEqual (choice_1 , self .person .choice_value )
355+
356+ self .person .choice_value = None
357+ self .person .save ()
358+
359+ self .assertEqual (1 , CustomValue .objects .count ())
360+ self .assertEqual (0 , self .person .custom_values .count ())
361+ self .assertIsNone (self .person .choice_value )
362+
363+ def test_custom_field_base_model_remove_multiple_choice_value (
364+ self ,
365+ ) -> None :
366+ field = CustomFieldFactory (
367+ identifier = "multiple_choice_value" ,
368+ content_type = self .person_ct ,
369+ field_type = CustomField .FIELD_TYPES .DATE ,
370+ choice_field = True ,
371+ multiple = True ,
372+ )
373+ choice_1 : CustomValue = CustomValueFactory (field = field , value = "2000-01-01" ) # type: ignore
374+ CustomValueFactory (field = field , value = "2001-01-01" )
375+ choice_3 : CustomValue = CustomValueFactory (field = field , value = "2002-01-01" ) # type: ignore
376+
377+ # we need to annotate the custom_field_keys manually or to fetch the person with the queryset again,
378+ # because we created a new field
379+ self .person .refresh_with_custom_fields ()
380+
381+ self .person .multiple_choice_value = [choice_1 , choice_3 ]
382+ self .person .save ()
383+
384+ self .assertEqual (3 , CustomValue .objects .count ())
385+ self .assertEqual (2 , self .person .custom_values .count ())
386+ self .assertEqual (
387+ [
388+ {"id" : choice_1 .id , "label" : None , "value" : "2000-01-01" },
389+ {"id" : choice_3 .id , "label" : None , "value" : "2002-01-01" },
390+ ],
391+ Person .objects .first ().multiple_choice_value ,
392+ )
393+
394+ self .person .multiple_choice_value = None
395+ self .person .save ()
396+
397+ self .assertEqual (3 , CustomValue .objects .count ())
398+ self .assertEqual (0 , self .person .custom_values .count ())
399+ self .assertIsNone (self .person .multiple_choice_value )
400+
401+ def test_custom_field_base_model_set_value_with_set_custom_attr (self ) -> None :
402+ CustomFieldFactory (
403+ identifier = "char_value" ,
404+ content_type = self .person_ct ,
405+ field_type = CustomField .FIELD_TYPES .CHAR ,
406+ )
407+
408+ self .assertEqual (0 , CustomValue .objects .count ())
409+ self .assertEqual (0 , len (self .person ._custom_values_to_save ))
410+
411+ self .person .set_custom_attr ("char_value" , "Char value" )
412+
413+ self .assertEqual (0 , CustomValue .objects .count ())
414+ self .assertEqual (1 , len (self .person ._custom_values_to_save ))
415+ self .person .save ()
416+
417+ self .assertEqual (1 , CustomValue .objects .count ())
418+ self .assertEqual (0 , len (self .person ._custom_values_to_save ))
419+
420+ self .assertEqual ("Char value" , self .person .char_value )
421+ self .assertEqual ("Char value" , Person .objects .first ().char_value )
422+ self .assertEqual ("Char value" , CustomValue .objects .first ().value )
0 commit comments