Python Django泛型关系不起作用
因此,在向我的一个模型类添加或删除GenericRelation之后,什么也没有发生 我尝试进行迁移,它告诉我没有检测到任何更改。所以一定是出了什么问题,因为它应该访问数据库并尝试应用一些更改 我遵循了Django的例子,但我无法使这种关系起作用Python Django泛型关系不起作用,python,django,Python,Django,因此,在向我的一个模型类添加或删除GenericRelation之后,什么也没有发生 我尝试进行迁移,它告诉我没有检测到任何更改。所以一定是出了什么问题,因为它应该访问数据库并尝试应用一些更改 我遵循了Django的例子,但我无法使这种关系起作用 class Person(models.Model): identity = models.CharField(max_length=13, verbose_name="ID") name = models.CharField(max_
class Person(models.Model):
identity = models.CharField(max_length=13, verbose_name="ID")
name = models.CharField(max_length=255, verbose_name="Name")
board = GenericRelation('second_app.BoardMember') #Second Try
def __unicode__(self):
return self.identity
class Meta:
verbose_name = "Person"
verbose_name_plural = "People"
class Student(Person):
class Meta:
proxy = True
class Parent(Person):
class Meta:
proxy = True
class Teacher(Person):
board = GenericRelation('second_app.BoardMember') # first try
class Meta:
proxy = True
在不同的应用程序上,我有以下型号
class BoardMember(models.Model):
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey('content_type', 'object_id', for_concrete_model=False)
responsabilities = models.CharField(max_length=255)
首先,我尝试在代理模型上设置泛型关系。什么也没发生,然后我试着把它设置在主要人物类上。没有什么。这就是我在外壳上测试关系所做的
>>>from first_app.models import Teacher
>>>from second_app.models import BoardMember
>>>teacher = Teacher(identity='123456', name='Fermin Arellano')
>>>teacher.save()
>>>bm = Boardmember(content_object=teacher,responsabilities='Check stuff')
>>>bm.save()
>>>teacher.board.all()
[]
下面这个例子:
预期结果应该是:[]
我做错什么了吗?任何地方都没有显示错误。数据保存正确,在我的数据库中成功创建了教师和BoardMemer对象 我刚刚从GenericForeignKey声明中删除了
for_concrete_model=False
。尽管在Django的文档中,它明确指出为了使用ProxyModels,必须将其设置为false
现在一切正常
编辑。
我刚刚意识到问题依然存在。在进一步调查之后,我注意到为了获得工作的通用关系,我需要保存Person模型的content\u type\u id
,而不是代理模型。这就是为什么删除for_concrete_model参数会有所帮助,因为这样我告诉Django使用parents内容类型,结果很好。有趣的是,如果我做了下面的事情,即使我有个人的content\u type\u id
,关系仍然有效
Teacher.objects.filter(board__isnull=False)
这将返回董事会中的所有教师
这真是令人困惑,如果你能解释一下这一混乱局面,我将非常感谢。你的观察,即
generirelation
不会加强代理模型上的删除,但会加强具体模型上的删除,这是正确的。我创建了此票据: