首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django-tables2反向查找

Django-tables2反向查找
EN

Stack Overflow用户
提问于 2014-01-02 01:08:12
回答 2查看 1.4K关注 0票数 0

我有一个表格,其中显示了渲染良好的"leads“列表。还有一个被称为"Leadupdate“的相关模型,它与表中使用的"lead”模型相关。从Leadupdate到具有外键的lead存在多对一关系。我想要在其中一个更新列中显示单个"leads“的所有相关更新。网上有几个通过外键跟踪正向关系的例子,但还没有找到一个反向关系。以下是所述关系Accessor forward look up.的一个示例

编辑:查找将在Django-tables2模块实例表上完成。我不是在模型上要求反向查找,而是在Django-tables2的上下文中这样做。

Models.py:

代码语言:javascript
运行
复制
    class lead(models.Model):
        slug = models.SlugField(unique=True,blank=True, null=True)
        first_name = models.CharField(max_length=100)
        last_name = models.CharField(max_length=100, blank=True, null=True)
        business_name = models.CharField(max_length=100,blank=True, null=True)
        email = models.EmailField(max_length=75, blank=True, null=True)
        phone_number = models.CharField(max_length=20, blank=True, null=True)
        address = models.CharField(max_length=150, blank=True, null=True)
        city = models.CharField(max_length=50, blank=True, null=True)
        state = models.CharField(max_length=10, blank=True, null=True) 
        zipcode = models.CharField(max_length=5, blank=True, null=True)
        submission_date = models.DateTimeField(auto_now_add=True, blank=True)
        assigned_to = models.ManyToManyField(Listing,blank=True, null=True, related_name="leads")
        requested_software = models.CharField(max_length=50, blank=True, null=True)
        type_of_business = models.CharField(max_length=30, choices=TYPE_OF_BUSINESS, default='Bar', blank=True, null=True) 
        time_frame = models.CharField(max_length=10, choices=TIME_FRAME, default='1')
        comments = models.TextField(blank=True, null=True)

        def __unicode__(self):
            return self.business_name
        @models.permalink
        def get_absolute_url(self):
            return('listing_detail', (),{'slug' :self.slug,})

        def save(self, *args, **kwargs):
            if not self.slug:
                self.slug = slugify(self.business_name)
                super(lead, self).save(*args, **kwargs)


class Leadupdate(models.Model):

    CONFIDENCE_LEVEL = (
            ('HOT', 'HOT'),
            ('COLD', 'COLD'),
            )

    LEAD_VALUE = (
            ('1K3K', '1K-3K'),
            ('5K10K', '5K-10K'),
            ('10K20K', '10K-20K'),
            ('20K50K', '20K-50K'),
            ('50KUP', '5OK-UP'),
            )

    ESTIMATED_CLOSING = (
            ('1w4w', '1-4 Weeks'),
            ('1m3m', '1-3 Months'),
            ('3m6m', '3-6 Months'),
            ('6m+', '6+ Months'),
            )

    updatedate = models.DateTimeField(auto_now_add=True)
    update = models.TextField(blank=True, null=True)
    updatefrom = models.ForeignKey(Listing, related_name="update_from", blank=True, null=True)
    lead = models.ForeignKey(lead, related_name="related_update",blank=True, null=True)
    lead_confidence_level = models.CharField(max_length=10, choices=CONFIDENCE_LEVEL, default='COLD', blank=True, null=True)
    estimated_lead_value  = models.CharField(max_length=10, choices=LEAD_VALUE, default='1K3K', blank=True, null=True)
    estimated_closing_frame  = models.CharField(max_length=10, choices=ESTIMATED_CLOSING, default='1-4 Weeks', blank=True, null=True)
    def __unicode__(self):
        return u" %s - %s " % (self.update, self.updatedate)

表:

代码语言:javascript
运行
复制
class LeadTable(tables.Table):
    business_name = tables.LinkColumn('lead-detail', args=[A('slug')])
    updates = tables.Column(accessor='lead.related_update')
    class Meta:
        model = lead
        fields = ("business_name","first_name", "last_name","number_of_pos","submission_date","updates")
        attrs = {"class":"paleblue"}
EN

回答 2

Stack Overflow用户

发布于 2016-01-24 14:12:06

这是一个迟来的答案,但这里是我在Django 1.8.6和django-tables2 1.1.0 (基于Django-Tables2 Issue 156This answer)中工作的方法。要通过外键关系访问一组一对多的对象,只需在访问器中使用related_name,然后创建一个render方法来生成写入列单元格的内容。在该方法中,您可以获取所有外来模型对象,并在for循环中访问它们的字段。

代码语言:javascript
运行
复制
class LeadTable(tables.Table):
    business_name = tables.LinkColumn('lead-detail', args=[A('slug')])
    updates = tables.Column(accessor='related_update')
    def render_updates(self, value, table):
        updates = ""
        uFirst = True
        updatesList = list(value.all())
        for u in updatesList:
            if not uFirst:
                updates += ", "
            else:
                uFirst = False
            updates += u.update
        return updates
    class Meta:
        model = lead
        fields = ("business_name","first_name", "last_name","number_of_pos","submission_date","updates")
        attrs = {"class":"paleblue"}
票数 1
EN

Stack Overflow用户

发布于 2014-01-02 03:15:29

根据django docs的说法

在视图中,您可以这样访问它们(假设lead_instancelead类的一个实例):

代码语言:javascript
运行
复制
all_leadtables_for_lead = lead_instance.leadtable_set

附注:为了遵守python ,对类(class Lead(models.Model):)使用大写的名称。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20871026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档