【发布时间】:2016-01-31 12:08:13
【问题描述】:
我想为具有GenericForeignKey 关系的模型(Comment) 创建数据迁移。我的模型是根据django documentation 为contenttypes 制作的。
型号:
...
class NiceMeme(models.Model):
"""
Example model.
"""
name = models.CharField(max_length=140)
image = models.ImageField(upload_to=get_path_to_store_nice_meme_images)
class Comment(models.Model):
"""
Model to add comments to any other (non abstract) model.
"""
...
user = models.ForeignKey(ExtendedUser)
content = models.CharField(max_length=140)
content_type = models.ForeignKey(ContentType)
object_pk = models.PositiveIntegerField()
content_object = GenericForeignKey('content_type', 'object_pk')
数据迁移:
...
def create_comment(apps, schema_editor):
...
nice_meme = NiceMeme.objects.create(name='Nice nice meme')
Comment.objects.create(
user=user,
content='Gott ist tot',
poster_username='Friedrich',
content_object=nice_meme
)
...
operations = [
migrations.RunPython(create_comment)
]
当我运行./manage.py migrate 时,我得到:
TypeError: 'content_object' is an invalid keyword argument for this function
我不得不说,我在视图中使用了与create_comment 相同的代码并且运行良好。
我正在使用 django 1.7.7。我没有用南。
编辑: 我试过尚王的答案。
Comment.objects.create(
user=user,
content='Gott ist tot',
poster_username='Friedrich',
content_type=ContentType.objects.get_for_model(nice_meme),
object_pk=nice_meme.id
)
也不行:
ValueError: Cannot assign "<ContentType: nice meme>": "Comment.content_type" must be a "ContentType" instance.
【问题讨论】:
-
我也有同样的问题,使用 Django 1.8.3 :/
-
你检查答案了吗?
-
对不起。我正在休假。我会在几个小时内看看它。谢谢。
标签: python django django-migrations generic-foreign-key