Django Rest Framework Generic Relation按风险标签搜索

时间:2015-11-25 09:11:43

标签: django django-models django-views django-rest-framework django-generic-views

以下是我创建的模型: 所以我用风险标记了每个数据项(搜索结果),现在我想在项目中按风险浏览数据项。 我没有具体的想法,通用关系如何工作。在论坛上查看我看到人们使用泛型来为结果添加标签。我正在使用Django 1.7。我现在已经完成了所有工作,但我不确定如何编写视图集以便按风险搜索搜索结果,以便我可以从前端查询API。 搜索结果可能会标记多个风险

enter image description here

`

Risks/models.py

    class Risk(models.Model):
        """Risk for data. Every risk has unique name.
        """
    name = models.CharField(max_length=100, unique=True)
    search_string = models.TextField(blank=True)  # search keywords related to this risk    
    def __unicode__(self):
        return 'Risk[id: {id}, name: {name}]'.format(
            id=self.id, name=self.name)

class RiskItem(models.Model):
    #RiskItem(content_type=article, risk=r)
    risk = models.ForeignKey(Risk)
    project = models.ForeignKey('engagement.Project')
    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField()
    content_object = GenericForeignKey('content_type', 'object_id')
    def __unicode__(self):
        return "%s :" % (self.risk.name)

我通过GenericRelation在搜索结果模型中引用了风险,参考了论坛。这是它的样子。 以下是我的搜索结果,每个搜索项都与风险相关联。 enter image description here

Search/models.py

from engagement.models import Project
from risk.models import RiskItem
from django.contrib.auth.models import User

class Search(models.Model):

    project = models.ForeignKey(Project, related_name="searches")
    user = models.ForeignKey(User)
    string = models.CharField(max_length=1024) # search string

    created_at = models.DateTimeField(auto_now_add=True)
    def __unicode__(self):
      return self.string


class SearchResult(models.Model):
    search = models.ForeignKey(Search, related_name="results")
    title = models.CharField(max_length=255)
    url = models.URLField(blank=False, max_length=300)
    snippet = models.TextField(blank=True)
    risks = GenericRelation(RiskItem)
    label = models.CharField(max_length=100, default=0)

    created_at = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering = ('rank',)

    def __unicode__(self):
       return self.title

`

  
    
      

想要创建一个按风险列出所有搜索结果的视图,通过连接两个api,单个风险可以与多个搜索结果项相关联。

    
  

0 个答案:

没有答案