Prepare `params` for creating a model instance based on the given kwargs; for use by get_or_create().
(self, defaults, **kwargs)
| 1111 | aupdate_or_create.alters_data = True |
| 1112 | |
| 1113 | def _extract_model_params(self, defaults, **kwargs): |
| 1114 | """ |
| 1115 | Prepare `params` for creating a model instance based on the given |
| 1116 | kwargs; for use by get_or_create(). |
| 1117 | """ |
| 1118 | defaults = defaults or {} |
| 1119 | params = {k: v for k, v in kwargs.items() if LOOKUP_SEP not in k} |
| 1120 | params.update(defaults) |
| 1121 | property_names = self.model._meta._property_names |
| 1122 | invalid_params = [] |
| 1123 | for param in params: |
| 1124 | try: |
| 1125 | self.model._meta.get_field(param) |
| 1126 | except exceptions.FieldDoesNotExist: |
| 1127 | # It's okay to use a model's property if it has a setter. |
| 1128 | if not (param in property_names and getattr(self.model, param).fset): |
| 1129 | invalid_params.append(param) |
| 1130 | if invalid_params: |
| 1131 | raise exceptions.FieldError( |
| 1132 | "Invalid field name(s) for model %s: '%s'." |
| 1133 | % ( |
| 1134 | self.model._meta.object_name, |
| 1135 | "', '".join(sorted(invalid_params)), |
| 1136 | ) |
| 1137 | ) |
| 1138 | return params |
| 1139 | |
| 1140 | def _earliest(self, *fields): |
| 1141 | """ |