          self.choices = flatten_choices_dict(self.grouped_choices)
          self.html_cutoff = kwargs.pop('html_cutoff', self.html_cutoff)
          self.html_cutoff_text = kwargs.pop('html_cutoff_text', self.html_cutoff_text)
  
          # Map the string representation of choices to the underlying value.
          # Allows us to deal with eg. integer choices while supporting either
          # integer or string input, but still get the correct datatype out.
          self.choice_strings_to_values = {
              six.text_type(key): key for key in self.choices.keys()
          }
  
          self.allow_blank = kwargs.pop('allow_blank', False)
  
          super(ChoiceField, self).__init__(**kwargs)
  
      def to_internal_value(self, data):
 
</s> remove         self.grouped_choices = to_choices_dict(choices)
        self.choices = flatten_choices_dict(self.grouped_choices)
 </s> add         self.choices = choices
          self.choices = flatten_choices_dict(self.grouped_choices)
          self.html_cutoff = kwargs.pop('html_cutoff', self.html_cutoff)
          self.html_cutoff_text = kwargs.pop('html_cutoff_text', self.html_cutoff_text)
  







          self.allow_blank = kwargs.pop('allow_blank', False)
  
          super(ChoiceField, self).__init__(**kwargs)
  
      def to_internal_value(self, data):
keep keep keep keep replace replace replace replace replace replace replace keep keep keep keep keep
 Allow `ChoiceField.choices` to be set dynamically (#5426)

## Description

The `choices` field for the `ChoiceField` class should be able to be edited after `ChoiceField.__init__` is called.

```
field = ChoiceField(choices=[1,2])
field.choices = [1]  # Should no longer allow `2` as a choice
```

Currently, you must update `choices`, `grouped_choices`, and `choice_strings_to_values` to achieve this. This P/R keeps `grouped_choices` and `choice_strings_to_values` in sync whenever the `choices` are edited. 
rest_framework/fields.py