def test_get_name_field_for_model_error_non_unique(): class NoRegisteredNameException2Model(Model): name = IntegerField() with pytest.warns(Warning) as records: get_search_fields(model=NoRegisteredNameException2Model) assert str(records[0].message) == "The model NoRegisteredNameException2Model is using the default `name` field as a search field, but it's not unique. You can register_search_field(..., =unique=False) to silence this warning. The reason we are warning is because you won't be able to use the advanced query language with non-unique names."
def test_get_name_field_for_model_error(): class NoRegisteredNameExceptionModel(Model): pass with pytest.raises(NoRegisteredSearchFieldException) as e: get_search_fields(model=NoRegisteredNameExceptionModel) assert str(e.value) == 'NoRegisteredNameExceptionModel has no registered search fields. Please register a list of field names with register_search_fields.'
def build_query_expression(*, field, filter, value): if isinstance(value, Model): try: # We ignore the return value on purpose here. We are after the raise. get_search_fields(model=type(value)) except NoRegisteredSearchFieldException: return f'{field._name}.pk={value.pk}' return f'{field._name}{filter.query_operator_for_field}{value_to_str_for_query(filter, value)}'
def test_get_name_field_for_model_error_non_unique(): class NoRegisteredNameException2Model(Model): name = IntegerField() with pytest.raises(NoRegisteredSearchFieldException) as e: get_search_fields(model=NoRegisteredNameException2Model) assert str( e.value ) == "The model NoRegisteredNameException2Model has no registered search fields. Please register a list of field names with register_search_fields. It has a field `name` but it's not unique in the database so we can't use that."
def on_bind(self) -> None: if self.attr is MISSING: self.attr = self._name # Not strict evaluate on purpose self.model = evaluate(self.model, **self.iommi_evaluate_parameters()) if self.model and self.include and self.attr: try: self.search_fields = get_search_fields(model=self.model) except NoRegisteredSearchFieldException: self.search_fields = ['pk']
def on_bind(self) -> None: if self.attr is MISSING: self.attr = self._name # Not strict evaluate on purpose self.model = evaluate(self.model, **self.iommi_evaluate_parameters()) if self.model and self.include: try: self.search_fields = get_search_fields(model=self.model) except NoRegisteredSearchFieldException: self.search_fields = ['pk'] if iommi_debug_on(): print(f'Warning: falling back to primary key as lookup and sorting on {self._name}. \nTo get rid of this warning and get a nicer lookup and sorting use register_search_fields.')
def on_bind(self) -> None: assert self.template form = self.iommi_parent().iommi_parent() if self.attr is MISSING: self.attr = self._name if self.display_name is MISSING: self.display_name = capitalize(self._name).replace('_', ' ') if self._name else '' self.errors = Errors(parent=self, **self.errors) if form.editable is False: self.editable = False # Not strict evaluate on purpose self.model = evaluate(self.model, **self.iommi_evaluate_parameters()) self.choices = evaluate_strict(self.choices, **self.iommi_evaluate_parameters()) self.initial = evaluate_strict(self.initial, **self.iommi_evaluate_parameters()) self._read_initial() self._read_raw_data() self.parsed_data = evaluate_strict(self.parsed_data, **self.iommi_evaluate_parameters()) self._parse() self._validate() self.input = self.input.bind(parent=self) self.label = self.label.bind(parent=self) assert not self.label.children self.label.children = dict(text=evaluate_strict(self.display_name, **self.iommi_evaluate_parameters())) self.non_editable_input = self.non_editable_input.bind(parent=self) if self.model and self.include: try: self.search_fields = get_search_fields(model=self.model) except NoRegisteredSearchFieldException: self.search_fields = ['pk'] if iommi_debug_on(): print(f'Warning: falling back to primary key as lookup and sorting on {self._name}. \nTo get rid of this warning and get a nicer lookup and sorting use register_search_fields.')