def insert_and_get(self, **fields):
if not self.conflict_target and not self.conflict_action:<EOL><INDENT>return super().create(**fields)<EOL><DEDENT>compiler = self._build_insert_compiler([fields])<EOL>rows = compiler.execute_sql(return_id=False)<EOL>columns = rows[<NUM_LIT:0>]<EOL>model_columns = {}<EOL>for field in self.model._meta.local_concrete_fields:<EOL><INDENT>model_columns[field.column] = field.attname<EOL><DEDENT>model_init_fields = {}<EOL>for column_name, column_value in columns.items():<EOL><INDENT>try:<EOL><INDENT>model_init_fields[model_columns[column_name]] = column_value<EOL><DEDENT>except KeyError:<EOL><INDENT>pass<EOL><DEDENT><DEDENT>return self.model(**model_init_fields)<EOL>
Creates a new record in the database and then gets
        the entire row.

        This allows specifying custom conflict behavior using .on_conflict().
        If no special behavior was specified, this uses the normal Django create(..)

        Arguments:
            fields:
                The fields of the row to create.

        Returns:
            The model instance representing the row that was created.