3👍
I don’t see how is your first example supposed to be a bug? This behavior is completely intuitive. Your p is a play with an id of 2383, and you’re calling the create method on its related set. You’re also specifying an extra field, called player_id, and giving it a value of 2383. It’s only logical that both play id will be 2383 (because that’s the id of the play containing this related set) and that player id will also be 2383 (because you explicitly passed that value in).
Your second example would seem to indicate a bug, but I cannot reproduce it. Here are my models:
class Player(models.Model):
name = models.CharField(max_length=100)
class Play(models.Model):
title = models.CharField(max_length=100)
class PlayParticipant(models.Model):
player = models.ForeignKey('Player')
play = models.ForeignKey('Play')
note = models.CharField(max_length=100, blank=True)
Here’s the shell output:
>>> player1 = Player.objects.create()
>>> player2 = Player.objects.create()
>>> player1.id
2
>>> player2.id
3
>>> play1 = Play.objects.create()
>>> play2 = Play.objects.create()
>>> play1.id
3
>>> play2.id
4
>>> pp1 = play1.playparticipant_set.create(player_id=2)
>>> pp1.play.id
3
>>> pp1.player.id
2
In any case, why are you posting this to SO? Django has a bugtracker, a couple of active official mailing lists and a couple of IRC channels.
1👍
You should be using a ManyToManyField in the Play model that relates to the zero or more participants. In that code you would just be doing
play.players.add(player)
- [Django]-How to send object from detail view to another view in Django?
- [Django]-Django: Can we set permission to use an app?
0👍
It is not a bug; check the documentation; specifically the section on Extra fields on many-to-many relationships. It specifies:
Unlike normal many-to-many fields, you can’t use
add
,create
, orassignment
(i.e.,beatles.members = [...]
) to create relationships.The only way to create this type of relationship is to create instances of the intermediate model.
0👍
I cannot reproduce that behaviour. With similar models, I can run:
m = Manufacturer.objects.get(1)
p = m.product_set.create(name='23',category_id=1,price=23,delivery_cost=2)
and I get new instance p
of Product
, whose p.manufacturer
foreign key equals m
.
This is on Django-1.0.2 with PostgreSQL; which version of Django do you use, and which SQL backend?
Try to use two new minimal models with ForeignKey field on one of them, which should work; then make these models gradually closer to models that exhibit the failing behaviour. This way you can isolate single change that makes it misbehave; this change is key to the reason.
- [Django]-Django catching any url?
- [Django]-Expect status [201] from Google Storage. But got status 302
- [Django]-How to find all Django foreign key references to an instance
- [Django]-Django-admin: change column font to red when if condition is true
- [Django]-Django cors headers and server error