Repository: cisagov/manage.get.gov

Issue:
Inaccurate data in Stable: DomainInformation being overwritten 
### Current Behavior
When new applications are being approved, unrelated DomainInformation objects are being overwritten.

In addition to causing the Domain to lose its DI, it is also causing current-full and current-federal to reporting the wrong data because the data in stable is now inaccurate. 

### Expected Behavior
`.approve()` no longer overrides DI records when it shouldn't.

### Steps to Reproduce

This can be reproduced in two ways:
1. Use staging or backup
2. Create a new Domain Application
3. Approve it
4. Search for it in the Audit Log
5. Note that the change on "Domain Information" is of type "Update", which is incorrect.

Or, alternatively:
In `create_from_da`, add da_dict["id"] = 1 and repeat the same steps.
### Environment

Environment: Stable + all developer sandboxes

### Additional Context

Screenshot of message
![image](https://github.com/cisagov/manage.get.gov/assets/144387994/f0488b27-7d4b-4f9f-952d-8d3fa6306d48)

[Slack thread](https://cisa-corp.slack.com/archives/C05BGB4L5NF/p1708084192079019)

### Issue Links

_No response_


Discussion:

Resolving patch:
diff --git a/src/registrar/models/domain_information.py b/src/registrar/models/domain_information.py
--- a/src/registrar/models/domain_information.py
+++ b/src/registrar/models/domain_information.py
@@ -255,6 +255,14 @@ def create_from_da(cls, domain_application: DomainApplication, domain=None):
                 else:
                     da_many_to_many_dict[field] = getattr(domain_application, field).all()
 
+        # This will not happen in normal code flow, but having some redundancy doesn't hurt.
+        # da_dict should not have "id" under any circumstances.
+        # If it does have it, then this indicates that common_fields is overzealous in the data
+        # that it is returning. Try looking in DomainHelper.get_common_fields.
+        if "id" in da_dict:
+            logger.warning("create_from_da() -> Found attribute 'id' when trying to create")
+            da_dict.pop("id", None)
+
         # Create a placeholder DomainInformation object
         domain_info = DomainInformation(**da_dict)
 
diff --git a/src/registrar/models/utility/domain_helper.py b/src/registrar/models/utility/domain_helper.py
--- a/src/registrar/models/utility/domain_helper.py
+++ b/src/registrar/models/utility/domain_helper.py
@@ -180,8 +180,8 @@ def get_common_fields(model_1: Type[models.Model], model_2: Type[models.Model]):
         """
 
         # Get a list of the existing fields on model_1 and model_2
-        model_1_fields = set(field.name for field in model_1._meta.get_fields() if field != "id")
-        model_2_fields = set(field.name for field in model_2._meta.get_fields() if field != "id")
+        model_1_fields = set(field.name for field in model_1._meta.get_fields() if field.name != "id")
+        model_2_fields = set(field.name for field in model_2._meta.get_fields() if field.name != "id")
 
         # Get the fields that exist on both DomainApplication and DomainInformation
         common_fields = model_1_fields & model_2_fields


Test patch: