在django中使用GenericForeignKey访问引用对象

时间:2013-10-11 10:55:25

标签: django django-models

我有以下型号:

Class A(models.Model):
    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField()
    content_object = generic.GenericForeignKey('content_type', 'object_id')
    thumbnail = models.ImageField(...)

class B(models.Model)
   title = models.CharField()

   def save(*args, **kwargs):
     # Based on the title field I want to fetch some picture and then save the thumbnail in A

我有更多像B这样的类应该从A引用(这就是我使用GenericForeignKey的原因)。我想弄清楚的问题是如何在B中的save()方法中保存缩略图字段(在A上)。在A中插入多个if语句以检查引用类的类型并保存相应的缩略图非常麻烦。

1 个答案:

答案 0 :(得分:0)

B查看at the docs, you can add a reverse generic relationA

  

如果您知道最常使用的型号,您还可以添加“反向”通用关系以启用其他API

class A_Model(models.Model):
    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField()
    content_object = generic.GenericForeignKey('content_type', 'object_id')
    thumbnail = models.ImageField(...)

class B_Models(models.Model)
    title = models.CharField()
    a_models = generic.GenericRelation(A_Model)

现在你可以这样做:

 b = B_Model()
 a = A_Model(content_object=b, thumbnail=...)
 a.save()
 b.a_models.all()