def _test_construct_id_filter(self, model, data): query = exists.construct_id_filter(model, data) qs = model.objects.filter(query) self.assertEqual(qs.count(), 1) p = qs.first() return p
def select_existing_item(self, manager, datum): automatic_filter = construct_id_filter(manager.model, datum) intermediate_result = manager.filter(automatic_filter) try: return intermediate_result.distinct().get() except manager.model.DoesNotExist: pass except manager.model.MultipleObjectsReturned as e: logger.error("Multiple objects on unique contrained items, freaky %s", e) logger.exception(e) # fallback to manually specified lookup_fields for lookup_field in self.Meta.lookup_fields: if lookup_field in datum: try: return intermediate_result.get( **{lookup_field: datum[lookup_field]} ) except manager.model.DoesNotExist: continue except manager.model.MultipleObjectsReturned: continue return None
def get_object(self): """ Returns the object the view is displaying. Tries to extract a uniquely indentifying query from the posted data """ try: automatic_filter = construct_id_filter(Product, self.request.data) obj = Product.objects.get(automatic_filter) self.check_object_permissions(self.request, obj) return obj except Product.DoesNotExist: raise Http404("No %s matches the given query." % Product._meta.object_name)
def restrict_query_to_parent(self, query): ParentModelClass = self.parent.Meta.model relation_field = ParentModelClass._meta.get_field(self.field_name) parent_field_name = relation_field.field.name if self.parent.instance: return query.exclude(**{parent_field_name: self.parent.instance}) else: parent_filter = construct_id_filter( ParentModelClass, self.parent.get_initial(), prefix="%s%s" % (parent_field_name, LOOKUP_SEP), ) return query.exclude(parent_filter).distinct()