Python GenericForeignKey数据迁移错误:';内容对象';是无效的关键字参数
我想为具有Python GenericForeignKey数据迁移错误:';内容对象';是无效的关键字参数,python,django,django-migrations,generic-foreign-key,Python,Django,Django Migrations,Generic Foreign Key,我想为具有GenericForeignKey关系的模型(Comment)创建数据迁移。我的模型是根据for制作的 型号: ... class NiceMeme(models.Model): """ Example model. """ name = models.CharField(max_length=140) image = models.ImageField(upload_to=get_path_to_store_nice_meme_ima
GenericForeignKey
关系的模型(Comment
)创建数据迁移。我的模型是根据for制作的
型号:
...
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\u object”是此函数的无效关键字参数
我不得不说,我在视图中使用了与create\u 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.
ValueError:无法分配“”:“Comment.content\u type”必须是“ContentType”实例。
请尝试以下操作:
from django.contrib.contenttypes.models import ContentType
nice_meme = NiceMeme.objects.create(name='Nice nice meme')
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)
我认为问题在于,您的content\u对象
字段只是您的注释
模型对象快速访问外键的一种简单方式,如:
obj = some_comment.content_object
它不是一个实际的字段,而是两个字段的组合,因此不能直接为它指定一个nicemome
对象
编辑:
听起来你在使用South,这里描述了一个问题。解决方案在另一个SO中得到了回答。听起来解决方案是冻结与迁移相关的任何模型:
python manage.py schemamigration --auto yourapp --freeze contenttypes
您可能需要冻结更多应用程序:
python manage.py schemamigration --auto yourapp --freeze contenttypes --freeze someotherapp ...
我以前从未遇到过这个问题,所以请阅读原始帖子了解更多详细信息,希望这能有所帮助。正如我所说,我也遇到过同样的问题,一位同事帮我提供了以下提示: 你确实需要设置
content\u-type
和object\u-pk
,正如+Shang-Wang所指出的,但是ContentType
必须使用apps加载。获取\u-model
而不是直接导入它
所以用这个:
ContentType=apps.get_model('contenttypes','ContentType')
在您的迁移方法中,所有这些都应该起作用:)
我也遇到了同样的问题,解决方案是获取模型名为小写的ContentType对象:
content=ContentType.objects.get(app_label='appname', model='modelname')
关于这个问题:
def create_comment(apps, schema_editor):
ContentType = apps.get_model('contenttypes', 'ContentType')
nice_meme = NiceMeme.objects.create(name='Nice nice meme')
Comment.objects.create(
user=user,
content=ContentType.objects.get(app_label='appname', model='nicememe')
poster_username='Friedrich',
content_object=nice_meme
)
谢谢你的回答。不幸的是,我得到了以下信息:
ValueError:cannotassign”“:“Comment.content\u type”必须是一个“ContentType”实例。
我更新了我的答案,我没有足够的知识来处理这个问题,但请尝试我找到的线程,看看是否有帮助。我不使用south,我使用django 1.7.7。很抱歉告诉你到现在为止。谢谢你的帮助。我也有同样的问题,使用Django 1.8.3:/你检查了答案吗?对不起。我正在度假。几小时后我会看的。谢谢你,他不是那样工作的ContentType.objects
实际上是django.db.models.manager.manager
所以我做的是:nice\u meme\u ContentType=ContentType.objects.get(app\u label='comments',model='niceme')
model name必须是小写的。现在开始工作:)奇怪的拉拉契查罗。。。您是否使用apps.get\u模型加载ContentType?我很高兴你解决了你的问题,顺便说一句:)救了我一天。谢谢
def create_comment(apps, schema_editor):
ContentType = apps.get_model('contenttypes', 'ContentType')
nice_meme = NiceMeme.objects.create(name='Nice nice meme')
Comment.objects.create(
user=user,
content=ContentType.objects.get(app_label='appname', model='nicememe')
poster_username='Friedrich',
content_object=nice_meme
)