【问题标题】:Fetching multiple entries of same id in django在 django 中获取相同 id 的多个条目
【发布时间】:2021-05-02 07:23:26
【问题描述】:

我正在尝试在主键的帮助下进行查询并检索该特定用户下列出的所有数据。我正在获取数据,但它只包含一个数据,但我应该得到三个。

以下是观点:

def eachlead(request, pk):
    # print(pk)
    lead = Lead.objects.get(id=pk)
    leadinfo = LeadDetail.objects.filter(id=pk)
    print(list(leadinfo))
    return render(request, "onelead.html", {'lead': lead, 'leadinfo': leadinfo})

这里是模型:

class LeadDetail(models.Model):
    Lead = models.ForeignKey(Lead, on_delete=models.CASCADE)
    files = models.FileField(blank=True, upload_to='media')
    tasks = models.TextField(max_length=1000)

    def __str__(self):
        return self.Lead.first_name 

class Lead(models.Model):
    lead_status = (
        ('Potential', 'Potential'),
        ('Prospect', 'Prospect'),
        ('Negotiation', 'Negotiation'),
        ('Converted', 'Converted'),
        ('Failed', 'Failed')
    )

    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    age = models.IntegerField(default=0)
    city = models.CharField(max_length=25, null=True)
    country = models.CharField(max_length=30, null=True)
    email = models.EmailField(max_length=50, null=True)
    agent = models.ForeignKey('Agent', on_delete=models.CASCADE, null=True)
    status = models.CharField(max_length=15, choices=lead_status, null=True)
    avatar = models.ImageField(null=True, upload_to='media')

    def __str__(self):
        return self.first_name

我收到的回复是[<LeadDetail: Test1111>][{'id': 1, 'Lead_id': 1, 'files': 'media/dummy.pdf', 'tasks': 'Meeting at 19:00 Friday'}],但此ID 下有3 个任务:

【问题讨论】:

  • 好吧,你应该查询外键而不是pk。尝试查询leadinfo = LeadDetail.objects.filter(lead_id=pk)

标签: python django database django-models django-views


【解决方案1】:

因为您试图从查询中获取LeadDetail,但 pk 只有 一个 值。您必须使用lead 进行过滤,而不是直接通过id 进行过滤。

def eachlead(request, pk):
    # print(pk)
    lead = Lead.objects.get(id=pk)
    leadinfo = LeadDetail.objects.filter(Lead=lead)

或者,您也可以这样做:

def eachlead(request, pk):
    # print(pk)
    lead = Lead.objects.get(id=pk)
    leadinfo = LeadDetail.objects.filter(Lead__id=pk)

Refs 到 django 查询集。

【讨论】:

    【解决方案2】:
    lead.leaddetail_set.all()
    

    This 更多信息

    【讨论】:

      猜你喜欢
      • 2020-01-15
      • 2018-02-11
      • 1970-01-01
      • 2017-09-10
      • 1970-01-01
      • 2014-05-30
      • 1970-01-01
      • 2012-11-25
      • 1970-01-01
      相关资源
      最近更新 更多