因此,在我的某个模型类中添加或删除GenericRelation后,没有任何反应。
我尝试制作色彩,它告诉我没有检测到任何变化。所以一定有问题,因为它应该击中数据库并尝试应用一些更改。
我遵循了Django的例子,我不能让这种关系发挥作用。
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)
首先,我尝试在代理模型上设置通用关系。什么都没发生,然后我尝试在主要的Person类上设置它。没有。这就是我在shell上测试关系的方法。
>>>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()
[]
遵循此示例:https://docs.djangoproject.com/en/1.8/ref/contrib/contenttypes/#reverse-generic-relations
预期结果应为:[<Teacher: 123456>]
我做错了吗?任何地方都没有错误。正确保存数据,在我的数据库中成功创建了Teacher和BoardMemer对象。
答案 0 :(得分:1)
我刚刚从GenericForeignKey声明中删除了for_concrete_model=False
。虽然在Django的文档中,它明确指出必须将其设置为false才能使用ProxyModels。
Everythings现在工作正常。
修改强>
我刚才意识到这个问题仍然存在。经过进一步调查后,我注意到为了使通用关系工作,我需要保存 Person 模型的content_type_id
,而不是代理模型。{这就是为什么删除for_concrete_model参数有帮助,因为这样我告诉Django使用父类内容类型,并且它工作得很好。有趣的是,如果我执行以下操作,尽管我拥有content_type_id
人,但关系仍然有效。
Teacher.objects.filter(board__isnull=False)
这将返回董事会中的所有教师。
这真是令人困惑,如果你能对这个烂摊子有所了解,我会非常感激。