Tom, I tried looking up the content_type and then using it, but it still throws errors.
*1. I tried* ct = ContentType.objects.get_for_model(Post) chapter = orm.Chapter(rank=1, content_type=ct, object_id=blog.id) *It gave error,* ValueError: Cannot assign "<ContentType: post>": "Chapter.content_type" must be a "ContentType" instance. *2. I tried* ct = orm['contenttypes.ContentType'].objects.get_for_model(orm['blog.Post']) chapter = orm.Chapter(rank=1, content_type=ct, object_id=blog.id) *It gave error,* AttributeError: 'Manager' object has no attribute 'get_for_model' *3. I tried* ct = orm['contenttypes.ContentType'].get(app_label="blog", model="Post") # I also tried setting model in the above get method to be lowercase. chapter = orm.Chapter(rank=1, content_type=ct, object_id=blog.id) *It gave error,* AttributeError: type object 'ContentType' has no attribute 'get' *BTW*, I am using *South 0.7.3.* Thanks again for helping. On Mon, Aug 8, 2011 at 10:25 AM, Tom Evans <tevans...@googlemail.com> wrote: > On Mon, Aug 8, 2011 at 3:06 PM, Chintan Tank <tankchin...@gmail.com> > wrote: > > (sorry for duplicate I have already posted on stackoverflow.com > > > http://goo.gl/I7Jj6 ) > > > > I need to perform a datamigration of a model Answer in app Question. > > In that script there is a dependency such that I need to create an > > instance of a model Chapter which is in the app Journal. So, I coded > > it as follows: > > > > def forwards(self, orm): > > for answer_object in orm.Answer.objects.all(): > > > > #This Works. > > blog, is_created = > > orm['blog.Post'].objects.get_or_create(title=answer_object.answer[: > > 100]) > > blog.save() > > > > #This DOES NOT work > > chapter, is_created = > > orm['journal.Chapter'].objects.get_or_create(content_object=blog) > > chapter.save() > > #cleanup task, not relevant to this question below > > answer_object.chapter_ptr = chapter > > answer_object.save() > > > > > > > > But as expected this throws an error on " > > orm['journal.Chapter'].objects.get_or_create(content_object=blog)" > > saying that > django.core.exceptions.FieldError: Cannot resolve > > keyword 'content_object' into field. > > > > This is presumably due to content_object being a GenericForeignKey so > > some operations are not allowed. But I also tried other alternatives > > for creating the "chapter" object like, > > > > chapter = orm['journal.Chapter'](content_object=blog) > > ERROR > TypeError: 'content_object' is an invalid keyword argument for > > this function > > > > and > > > > chapter = orm.journal.Chapter(content_object=blog) > > ERROR > AttributeError: The model 'journal' from the app 'questions' > > is not available in this migration. (Did you use orm.ModelName, not > > orm['app.ModelName']?) > > > > So since my earlier approach was failing I tried a new tact. The model > > whose instantiation was failing in my code above i.e. Chapter in the > > Journal app, I decided to create a datamigration for that instead. I > > also made sure to --freeze the models I am referring to in the > > forwards definition. Now this should have been straight forward, I > > would think. I have my forward code as follows - > > > > def forwards(self, orm): > > > > for answer_object in orm['questions.Answer'].objects.all(): > > > > #Works, AGAIN! > > blog, is_created = > > orm['blog.Post'].objects.get_or_create(title=answer_object.answer[: > > 100]) > > blog.save() > > > > # DOES NOT WORK, AGAIN! > > chapter = orm.Chapter(rank=1, content_object=blog) > > chapter.save() > > > > > > I would have thought that now since I am creating instance of a model > > (Chapter) which exists in the subject app (Journal) everything should > > have worked out. But i am getting the same error > TypeError: > > 'content_object' is an invalid keyword argument for this function. > > > > It fails at the same point, namely, "content_object". I will post > > below the model definition if that might help. > > > > class Chapter(models.Model): > > > > rank = models.IntegerField() > > > > content_type = models.ForeignKey(ContentType) > > object_id = models.PositiveIntegerField() > > content_object = generic.GenericForeignKey() > > > > Also all the models being touched in these forwards methods, namely - > > blog, chapter, questions; are fully defined in the 00n_*.py files > > created by South's schemamigration. > > > > content_object isn't a 'real' field, it is some magic applied to the > ORM and your model. The real fields are object_id and content type, so > use them directly. > > Use ContentType.objects.get_for_model() [1] to get the content type. > > [1] > https://docs.djangoproject.com/en/1.3/ref/contrib/contenttypes/#django.contrib.contenttypes.models.ContentTypeManager.get_for_model > > Cheers > > Tom > > -- > 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. > > -- Thanks & Regards, Chintan Tank Software Developer School of Library & Information Science Indiana University, Bloomington. http://www.cs.indiana.edu/~cdtank/ -- 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.