Opened 15 years ago
Closed 11 years ago
#12501 closed Bug (fixed)
Inconsistent behaviour in querying and creating objects
Reported by: | DmitryRisenberg | Owned by: | nobody |
---|---|---|---|
Component: | Database layer (models, ORM) | Version: | 1.1 |
Severity: | Normal | Keywords: | |
Cc: | commando@… | Triage Stage: | Accepted |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
I have a strange behaviour for the following models:
from django.db import models class Channel(models.Model): def createSubscription(self): subscription = Subscription.objects.create(channel = self) print Subscription.objects.filter(channel = self) return subscription class FeedChannel(Channel): link = models.CharField(max_length = 200, primary_key = True) class Subscription(models.Model): channel = models.ForeignKey(Channel)
This is what I get when I run ./manage.py shell with a newly created DB:
>>> from smth import models >>> c = models.FeedChannel.objects.create() >>> s = c.createSubscription() [] >>> print s.channel.id, c.channel_ptr.id 1 1 >>> >>>
The filter
query in createSubscription
does not include the created object. I either expect the filter
query to select the newly created Subscription
object, because its channel
field points to the correct Channel
instance, or the create
query to fail when it encounters an object of derived type instead of base.
Without the primary_key
constraint on link
field everything works just as expected.
I am using Django 1.1 and Python 2.5.
Change History (5)
comment:1 by , 15 years ago
Triage Stage: | Unreviewed → Accepted |
---|
comment:2 by , 14 years ago
Severity: | → Normal |
---|---|
Type: | → Bug |
comment:5 by , 11 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
This seems to be fixed in master. I am somewhat confident that this one has been tested already so I won't add more tests for this).
By putting the primary_key flag on the link, channel=self is no longer able to roll out as channel=self.pk. Some additional checks will be required internally to make sure the right parent link/value is used.