Hi,
I guess self.product_ids refers to One2Many field.
In such a case, you should use appropriate way to manipulate it.
It should be a syntax like this:
(0, 0, { values }) link to a new record that needs to be created with the given values dictionary
(1, ID, { values }) update the linked record with id = ID (write *values* on it)
(2, ID) remove and delete the linked record with id = ID (calls unlink on ID, that will delete the object completely, and the link to it as well)
(3, ID) cut the link to the linked record with id = ID (delete the relationship between the two objects but does not delete the target object itself)
(4, ID) link to existing record with id = ID (adds a relationship)
(5) unlink all (like using (3,ID) for all linked records)
(6, 0, [IDs]) replace the list of linked IDs (like using (5) then (4,ID) for each ID in the list of IDs)
Some references:
https://www.odoo.com/fr_FR/forum/aide-1/question/how-to-insert-value-to-a-one2many-field-in-table-with-create-method-28714
https://www.odoo.com/fr_FR/forum/aide-1/question/how-can-i-insert-data-in-a-one2many-field-145454
https://www.odoo.com/fr_FR/forum/aide-1/question/how-to-replace-previous-references-in-one2many-field-152379
I tried with the (6, 0, [IDs]), it still got deleted, here is the log:
odoo.models.unlink: User #2 deleted product.template records with IDs: [46]