Package: python-django Version: 1.3.1-3 Severity: normal Hello,
thank you for packaging django. I noticed that there is a problem with the default model object __eq__ implementation when working with deferred objects. The default implementation should be something like: def __eq__(self, other): return isinstance(other, self.__class__) and self._get_pk_val() == other._get_pk_val() Now, given a simple model... class Package(models.Model): name = models.TextField(null=False, unique=True) # Lots of other fields ...this code will show the problem: # Get a normal object p = Package.objects.get(name="debtags") # Get a deferred object dp = Package.objects.filter(name="debtags").only("name")[0] print object.__repr__(p), hash(p) print object.__repr__(dp), hash(dp) # This assert succeeds assert hash(p) == hash(dp) # This assert fails assert p == dp Its output is: <Package: debtags> 11 <Package_Deferred_ldesc_popcon_sdesc_source_version: debtags> 11 It looks like the isinstance bit of the default __eq__ model is failing here. This causes suprising behaviour: allpkgs = set(Package.objects.all().only("name")) # This assert fails assert Package.objects.get(name="debtags") in allpkgs I'll now work around this by implementing my own version of __eq__ methods in my model objects. Something like this works: def __eq__(self, other): return self.name == other.name although I'll have to pay attention not to end up with code that compares Packages with something else. Ciao, Enrico -- System Information: Debian Release: wheezy/sid APT prefers testing APT policy: (500, 'testing') Architecture: amd64 (x86_64) Kernel: Linux 3.1.0-1-amd64 (SMP w/4 CPU cores) Locale: LANG=en_GB.UTF-8, LC_CTYPE=en_GB.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Versions of packages python-django depends on: ii python 2.7.2-9 ii python2.6 2.6.7-4 ii python2.7 2.7.2-8 Versions of packages python-django recommends: ii libjs-jquery 1.7-1 Versions of packages python-django suggests: ii geoip-database-contrib <none> ii python-flup <none> ii python-mysqldb <none> ii python-psycopg <none> ii python-psycopg2 2.4.2-1 ii python-sqlite 1.0.1-8 ii python-yaml 3.10-2 -- no debconf information -- To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org