On Sunday, March 18, 2012 12:55:31 PM UTC+1, Maarten Japink wrote:
>
> I 'm working on a taxonomie.
> These are my models:
>
> class Classificatie(models.Model):
> name=models.CharField(max_length=60)
>
> def __unicode__(self):
> return self.name
>
> class Taxonomie(models.Model):
> name=models.CharField(max_length=60)
> level=models.ForeignKey(Classificatie)
> parent=models.ForeignKey('self', related_name='parent_id' )
> synoniem=models.ForeignKey('self',
> related_name='synoniem_id' ,blank=True, null=True)
>
> I populated the tabels in postgresql
>
> When I do:
> >>>Taxonomie.objects.count()
> I get the proper number of rows (593)
>
> but when i want to read a single object with:
> >>> t=Taxonomie.objects.get(id=20)
> Traceback (most recent call last):
> File "", line 1, in
> File "C:\Python27\lib\site-packages\django\db\models\manager.py",
> line 132, in
> get
> return self.get_query_set().get(*args, **kwargs)
> File "C:\Python27\lib\site-packages\django\db\models\query.py", line
> 344, in g
> et
> num = len(clone)
> File "C:\Python27\lib\site-packages\django\db\models\query.py", line
> 82, in __
> len__
> self._result_cache = list(self.iterator())
> File "C:\Python27\lib\site-packages\django\db\models\query.py", line
> 286, in i
> terator
> obj = model(*row[index_start:aggregate_start])
> File "C:\Python27\lib\site-packages\django\db\models\base.py", line
> 297, in __
> init__
> setattr(self, field.attname, val)
> File "C:\Python27\lib\site-packages\django\db\models\fields
> \related.py", line
> 402, in __set__
> manager.add(*value)
> TypeError: add() argument after * must be a sequence, not int
>
>
> I also tried the Taxonomie model with both ' self ' Foreignkey set to
> blank=True and null=True
> gives me the same problem. I also can't make new taxonomie objects
> with django
>
>
> What am I doiing wrong?
>
>
You're using the implicit column_name as the related_name on the
self-referencing FKs. Django will generate a column name from the name of
your field, which means parent_id and synoniem_id columns will be used.
Then you decide to use those as the related_name for the corresponding
ForeignKey. This won't cause a problem when you perform a count since in
that case no model instances need to be loaded; it's simply a query that's
executed.
This works and is more inline with what you should expect of a related name:
class Taxonomie(models.Model):
name=models.CharField(max_length=60)
level=models.ForeignKey(Classificatie)
parent=models.ForeignKey('self', related_name='parents' ,blank=True,
null=True)
synoniem=models.ForeignKey('self', related_name='synoniemen'
,blank=True, null=True)
By the way: if you can, you're better off using English for your code
rather than Dutch.
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To view this discussion on the web visit
https://groups.google.com/d/msg/django-users/-/Icc1RBqovDcJ.
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.