python 使用外键向后迭代查询集

von4xj4u  于 2023-03-11  发布在  Python
关注(0)|答案(1)|浏览(147)

我正在尝试迭代某个模型的查询集,并希望从一个表到另一个表。我的模型如下(缩小到更小的版本):

class Erp(models.Model):
    erp_id = models.AutoField(primary_key=True)
    target_item = models.ForeignKey('Items', models.DO_NOTHING,related_name='target_item')

class PE(models.Model):
    pe_id = models.AutoField(primary_key=True)
    item = models.ForeignKey(Items, models.DO_NOTHING, related_name='pe_item')

class Items(models.Model):
    item_id = models.AutoField(primary_key=True)
    item_name = models.Charfield(max_length=20)

我的Queryset看起来像这样,我试图循环并打印类Erp的内容:

pe_queryset = PE.objects.filter(item_id=2)
for pe in pe_queryset:
    print(pe.item.item_name) # is working
    print(pe.item.target_item.erp_id) # is not working
    print(pe.item.target_item) # gives back Erp.None

是否可以像这样通过条目迭代到另一个表的外键,或者我如何使用Queryset从ERP中获得值?
我试着遍历每个可能的列名。

pe_queryset = PE.objects.filter(item_id=2)
for pe in pe_queryset:
    print(pe.item.item_name) # is working
    print(pe.item.target_item.erp_id) # is not working
    print(pe.item.target_item) # gives back Erp.None
ej83mcc0

ej83mcc01#

Erp不是item那样的单个对象示例,因此应使用docs中所述的关系来检索相关数据。以下是一个示例:

pe_qs = PE.objects.filter(item_id=2)

for pe_obj in pe_qs:
    print(pe_obj.item.item_name)
    # You can use .values to obtain id's
    print(pe_obj.item.target_item.all().values('erp_id'))

    # Or Iterate directly
    erp_qs = pe_obj.item.target_item.all()
    for erp_obj in erp_qs:
        print(erp_obj.erp_id)

相关问题