Django:查询时缺少字段

时间:2018-10-27 03:45:47

标签: django django-models

查询数据库中的CalculatedAmt字段时遇到麻烦。实际上,根据错误代码,该字段甚至不存在。但是,我将其包含在Models.py中,甚至可以在Django的管理界面中看到它。

这是我的代码:

Model.py-我没有加入表,因为我不需要查询联接

class Customer(models.Model):
    Customer_Name_P = models.CharField(max_length=30, default="missing")
    Customer_TelNo = models.CharField(max_length=8, default="missing")
    Postal_Code = models.CharField(max_length=6, default="missing")

def __str__(self):
        return "%s" % self.Customer_Name_P

class Transaction(models.Model):
    DocRef = models.CharField(max_length=10,default="missing")
    DocDate = models.DateField()
    AcCrIsMinus1 = models.CharField(max_length=10,default="missing")
    AcCurWTaxAmt = models.CharField(max_length=10,default="missing")
    HomeWTaxAmt = models.CharField(max_length=10,default="missing")
    CalculatedAmt = models.CharField(max_length=10, default="missing")
    ProjectCode = models.CharField(max_length=10,default="missing")
    Location = models.CharField(max_length=10,default="missing")
    Sales_Person = models.CharField(max_length=10,default="missing")
    AcCode = models.CharField(max_length=8,default="missing")
    Customer_Name = models.CharField(max_length=30,default="missing")

    def __str__(self):
        return "%s" % self.id


class Salesperson(models.Model):
    Sales_Person_P = models.CharField(max_length=10,default="missing",primary_key=True)
    Sales_Person_Name = models.CharField(max_length=10,default="missing")
    Sales_Person_Contact = models.CharField(max_length=10,default="missing")

    def __str__(self):
        return "%s" % self.Sales_Person_P


class Account(models.Model):
    AcCode_P = models.CharField(max_length=8, default="missing",primary_key=True)
    Customer_Name = models.CharField(max_length=30,default="missing")
    AcCur = models.CharField(max_length=3, default="missing")

    def __str__(self):
        return "%s" % self.AcCode_P

在shell中查询(用于表):

Transaction.objects.all().filter(Sales_Person=Sales_Person).values('DocRef','DocDate','AcCrIsMinus1','HomeWTaxAmt','ProjectCode','Customer_Name','Location')

错误消息:

django.core.exceptions.FieldError: Cannot resolve keyword 'CalculatedAmt' into field. Choices are: AcCode, AcCrIsMinus1, AcCurWTaxAmt, Customer_Name, DocDate, DocRef, HomeWTaxAmt, Location, ProjectCode, Sales_Person, id

这是管理界面中的Transaction实例的屏幕截图: screenshot

python manage.py showmigrations输出的屏幕截图: screenshot

迁移0001_initial文件的屏幕截图 screenshot

谢谢!

1 个答案:

答案 0 :(得分:1)

此错误并不表示该字段缺失。如果模型字段存在问题,则会引发 FieldError异常。发生这种情况有几个原因:

  • 模型中的字段与来自 抽象基类
  • 无限循环是由顺序引起的
  • 无法从过滤器参数中解析关键字
  • 无法通过查询参数中的关键字确定字段
  • 不允许在指定字段上加入连接
  • 字段名无效查询包含无效的order_by参数

仅供参考,对于不存在的字段,有一个 FieldDoesNotExist 例外。当模型或模型的父级上不存在请求的字段时,将通过模型的$orders = ""; foreach($auth_tokens as $auth_token) { // .... //echo '<pre>' . var_export($xml, true) . '</pre><br>'; $orders .= $xml->asXML(); } $xml = simplexml_load_string("<Orders>$orders</Orders>"); header('content-type: text/xml'); echo $xml->asXML(); 方法来引发该值。

错误是因为您先获取_meta.get_field(),然后尝试过滤。当您提取所有内容时,会获得所有字段,然后在值中不包含all()

CalculatedAmt

t = Transaction.objects.filter(Sales_Person__iexact=Sales_Person) 对象将包含Transaction的所有字段,因此不需要t,例如,您可以通过.values来检索它们。 P.s. t.CalculatedAmt表示完全匹配,无需关心大小写。

此外,我假设您已尝试将2个模型与ixact连接在一起。但是您做错了方法。

您应该使用Sales_Person fieldOnetoOneForeignKey关系之一。我将使用ManytoMany,假设 销售人员可以进行很多交易,但每笔交易只能属于一个人

ForeignKey