【问题标题】:Django getting field names from different modelsDjango 从不同的模型中获取字段名称
【发布时间】:2026-02-18 23:05:01
【问题描述】:

伙计们, 有没有一种简单的方法可以通过链接连接从不同的模型返回不同的字段名称? 我的模型:

Class Item(models.Model):
    item_code = models.CharField(max_length=10)
    name = models.CharField(max_length=255)
    ...

Class Stock(models.Model):
    item_code = models.ForeignKey( Item )
    userid = models.ForeignKey( User )
    qty = models.IntegerField()
    ...

我想选择" Item.Item_code, Item.name, Stock.qty where Stock.userid=2 and Item.item_code = Stock.Item_Code"

我如何在 Django 中做到这一点?

加特

【问题讨论】:

    标签: django


    【解决方案1】:

    我想选择“ Item.Item_code, Item.name, Stock.qty where Stock.userid=2 and Item.item_code = Stock.Item_Code”

    如果您从Stock 模型开始,您可以使用一个 SQL 选择这些特定字段。比如

    q = Stock.objects.select_related('userid', 'item_code').filter(
       userid__id = 2).values('item_code__item_code', 'item_code__name', 'qty')
    

    如果您想限制数据然后限制查询数量,这将有所帮助。如果您对此不关心,请执行以下操作:

    q = Stock.objects.filter(userid__id = 2)
    for stock in q:
        print stock.item_code.item_code
        print stock.item_code.name
        print stock.qty
    

    这将返回一个查询集,其中仅包含您使用values 选择的那些字段。然后你可以遍历它。

    PS:回复:你的模型。

    Class Stock(models.Model):
        item_code = models.ForeignKey( Item )
        userid = models.ForeignKey( User )
        qty = models.IntegerField()
        ...
    

    对于 FK 关系,最好使用小写的模型名称。例如你应该写:

    Class Stock(models.Model):
        item = models.ForeignKey( Item ) # Changed
        user = models.ForeignKey( User ) # Changed
        qty = models.IntegerField()
        ...
    

    【讨论】:

      【解决方案2】:

      你也可以这样用:

      Stock.objects.filter(user=2).values('item__item_code', 'item__name')
      

      【讨论】:

        【解决方案3】:
        1. 首先更改文件名称
        2. 请仔细阅读http://docs.djangoproject.com/en/dev/ref/models/querysets/

          Class Item(models.Model):
             item_code = models.CharField(max_length=10)
             name = models.CharField(max_length=255)
             ...
          Class Stock(models.Model):
              item = models.ForeignKey( Item )
              user = models.ForeignKey( User )
              qty = models.IntegerField()
              ...
          
          
          #view 
          stocks = Stock.objects.filter(user=2)
          for stock in stocks:
              print stock.item.item_code, stock.item.name
          #one query version 
          

        【讨论】: