> But! I do have another problem. Lets ditch our football example. Let's say > that I have something like that: > > class CherryTree(models.Model): > name = models.IntegerField() > cherries = models.ManyToManyField('CherryFruit') > > class CherryFruit(models.Model): > name = models.CharField(max_length=50) > > More or less. The point is, I want to ass many CherryFruit to one > CherryTree. How do I pass the additional information? I suspect this can > have something to do with the 'through' argument, but I'm probably > completely wrong. Or do I have to create additional Model, like: > > class CherriesOnTree(models.Model): > name = models.ForeignKey('CherryFruit') > tree = models.ForeignKey('CherryTree') > amount = models.IntegerField() > > and add each fruit separately? Hope It's clear what I mean :).
well, no, no and no, but interesting anyways. A tree and it's fruit is the same as a team and it's players. You'd do class CherryTree(models.Model): name = models.IntegerField() class CherryFruit(models.Model): tree = models.ForeignKey(CherryTree) name = models.CharField(max_length=50) because each cherry belongs to a single tree. You can think of it as a parent-child relationship, the children are the ones that have the ForeignKey. The "through" parameter in a many to many just defines the name of the table to be used for that "CherriesOnTree" model you put there, which you wouldn't need to define. Also, the "amount" field would be of no point, would it? then you would do this: # create a new tree my_tree = Tree("Tree on the corner") # or maybe get a tree from the database my_tree = Tree.objects.get(name="Tree on the corner") # create a new cherry for this tree cherry = Cherry(tree=my_tree, name="Some Cherry Name") cherry.save() ## or if you don't need to do anything afterwards, you can simply Cherry(tree=my_tree, name="Some Cherry Name").save() a many-to-many would be used, for example, in a classes and students scenario Each student goes to many classes, each class has many students, so: class Class(models.Model): name = models.CharField(max_length=50) class Student(models.Model): name = models.CharField(max_length=50) classes = models.ManyToManyField(Class) # create class math = Class(name="Math") math.save() # create student student = Student(name="Charles") student.save() # need to save before setting up many to manies # Charles goes to Math class student.classes.add(math) Here an extra table will be created to hold the many-to-many relationships. I think it's called <appname>_class_m2m_student, or something like that. The through class is used if you want to add some extra data, like for example, where does a student seat in a particular class, or what other students he's in groups with in there, see https://docs.djangoproject.com/en/dev/topics/db/models/#intermediary-manytomany for more details -- "The whole of Japan is pure invention. There is no such country, there are no such people" --Oscar Wilde |_|0|_| |_|_|0| |0|0|0| (\__/) (='.'=)This is Bunny. Copy and paste bunny (")_(") to help him gain world domination. -- You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-users@googlegroups.com. To unsubscribe from this group, send email to django-users+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-users?hl=en.