Dav*_* R. 5 django django-contenttypes django-migrations django-generic-relations
我有带有 GenricForeigKey 和 GenericRelation 字段的模型。
class Datasheet(models.Model):
package1 = GenericRelation('PackageInstance')
...
class PackageInstance(models.Model):
content_object = GenericForeignKey()
object_id = models.PositiveIntegerField(null=True)
content_type = models.ForeignKey(ContentType, null=True, on_delete=models.CASCADE)
....
Run Code Online (Sandbox Code Playgroud)
我正在从另一个模型迁移,在迁移中我想创建新实例。
for ds in Datasheet.objects.all():
pi = PackageInstance.objects.create(content_object=ds)
Run Code Online (Sandbox Code Playgroud)
然而这失败了
TypeError: DesignInstance() got an unexpected keyword argument 'content_object'
Run Code Online (Sandbox Code Playgroud)
另外,ds.package1.all()也会失败。
AttributeError: 'Datasheet' object has no attribute 'package1'
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
我做了一些研究,但没有找到我的问题的直接答案。最重要的是要记住,模型方法在迁移中不可用。这包括由内容类型框架创建的字段。然而,object_id并且content_type将会在那里。
我的解决方案是简单地手工创建东西。
ContentType = apps.get_model('contenttypes', 'ContentType')
Datasheet = apps.get_model('api', 'Datasheet')
DatasheetContentType = ContentType.objects.get(model=Datasheet._meta.model_name, app_label=Datasheet._meta.app_label)
for ds in Datasheet.objects.all():
di = DesignInstance.objects.create(object_id=ds.id, content_type=DatasheetContentType)
Run Code Online (Sandbox Code Playgroud)