如何在django中使用唯一的通用外键?

时间:2016-03-27 10:58:59

标签: python mysql django

我在Django中有2个模型,它继承自抽象基类。

例如,我的抽象基础模型是common_content,我继承的2个模型是文章和访谈。

class commonContent:
     slug = models.TextField(blank=True, null=True, validators=[validate_slug])
     css = models.TextField(blank=True, null=True)
     html_content = models.TextField(blank=True, null=True)
     ..... and so on, there are few more properties related to meta tags

   class Meta:
    abstract = True

class Article(CommonContent):
   related_content = CommaSeparatedIntegerField(max_length=255, null=True, blank=True)

class Interview(CommonContent):
   related_content = CommaSeparatedIntegerField(max_length=255, null=True, blank=True)

现在我有一个类别模型,我想链接到访谈和文章(两者都有共同的类别)。

以下是我的分类模型: -

class Category():
name = models.CharField(max_length=100, unique=True, validators=[validate_slug])
display_text = models.CharField(max_length=255, null=True, blank=True)

现在我尝试使用以下模型中的通用外键将我的类别模型链接到文章和采访: -

class CategoryCommonContentMapping(BaseModel):
    category = models.ForeignKey(Category, null=True, blank=True)
    limit= models.Q(app_label = 'binger', model = 'interview') | models.Q(app_label = 'binger', model = 'article')
    type = models.ForeignKey(ContentType, on_delete=models.CASCADE,limit_choices_to = limit,default='')
    object_id = models.PositiveIntegerField(default='')
    contentObject = GenericForeignKey('type', 'object_id')
    score = models.FloatField(default=0.0)

现在我尝试以下列方式在此模型中使用unique:

class Meta:
    unique_together = (('category', 'type','object_id'),)

但缺少某些内容,我无法将文章/访谈链接到我的类别。

我是django的新手,正在尝试阅读文档。所以基本上我想要的是我可以将类别链接到采访/文章,以便我可以根据我页面上的类别过滤它们,即说当选择类别时(面试/文章)应该只对该类别可见。我已经编写了过滤器代码,并且在使用通用密钥之前它工作正常(我在同一模型中保留了Interview / Article)。

0 个答案:

没有答案