【问题标题】:Shows "Unable to get repr for <class 'django.db.models.query.QuerySet'>" while retrieving data检索数据时显示“无法获取 <class 'django.db.models.query.QuerySet'> 的代表”
【发布时间】:2017-11-06 14:17:47
【问题描述】:

我一直在尝试从模型 StudentInfo 中检索所有数据。 但它显示以下错误。

django.db.utils.ProgrammingError:student_studentinfo.gurdians_mobile 列不存在 全体学生
格式错误:ProgrammingError:student_studentinfo.gurdians_mobile 列不存在 第 1 行:...ile_no1"、"student_studentinfo"."current_address"、"student_s...

调试我的代码后,我发现导致错误的行是

allStudent = StudentInfo.objects.all()

并且调试信息显示:

无法获取类“django.db.models.query.QuerySet”的代表

这是我的模型StudentInfo

class StudentInfo(models.Model):
    student_name = models.CharField("Student Name",max_length=20)
    admission_date = models.DateField("Admission Date")
    mobile_no1 = models.CharField("Mobile No.",max_length=12)
    current_address = models.CharField("Current Address",max_length=20,blank=True)
    batch_number = models.ForeignKey(BatchInfo)
    coaching_id = models.IntegerField("Coaching ID")

    def __unicode__(self):
        return self.student_name

    def __repr__(self):
        return str(self.student_name)

以及与StudentInfo

相关的其他模型BatchInfo
class BatchInfo(models.Model):
    batch_name = models.CharField("Batch Name",max_length=20)
    batch_started_from = models.DateField("Batch Started From")
    no_of_registered_student = models.IntegerField("Number of Registered Student so far",default=0)

    def __str__(self):
        return self.batch_name
    def __unicode__(self):
        return self.batch_name

奇怪的是,我在其他地方使用了相同风格的代码,它们运行良好。

all_batch = BatchInfo.objects.all()

我尽力自己解决它,但作为一个新手,我发现这对我来说非常困难。所以我请求你的帮助。 提前致谢。

【问题讨论】:

  • 当您寻求故障排除帮助时,请始终提供完整的追溯信息。
  • @EmettSpeer 添加了更多回溯报告。我希望它足以找出问题
  • 我也有同样的问题。你解决了吗?

标签: python django python-3.x django-models


【解决方案1】:

看起来您使用的是 Python 3.x

改变你的

def __unicode__(self):

def __str__(self):

【讨论】:

  • 不,它不起作用。我已经尝试使用 __str__() 但它不起作用。
  • 您的编辑改变了整个问题。您的调试信息与错误消息无关。您是否正确运行了迁移?
  • 是的,我已正确迁移。它显示一切正常
【解决方案2】:

所以到目前为止,我对这个问题的了解是,对于这种特定类型的问题没有明确的答案。 Django 出于多种原因显示此错误。因此,我将列出迄今为止针对此问题遇到的所有方案和解决方案:

  1. 如果您尝试过滤或访问模型声明中不存在的字段,则可能会出现此问题。
  2. 脏模型迁移 :P : 作为初学者,这是我的噩梦。大多数时候,我因迁移不当而收到此错误。因此,如果您没有正确迁移模型更改,那么您肯定会收到此错误。要解决此问题,您必须重置迁移。为此,您可以查看以下链接: https://simpleisbetterthancomplex.com/tutorial/2016/07/26/how-to-reset-migrations.html

注意:一旦我得到新的场景和他们的解决方案,我会及时更新这个答案。

【讨论】:

    【解决方案3】:

    当您的数据库出现问题时,就会出现这些问题。 @Shubho Shaha 的回答非常出色。我遇到了同样的问题,我按照下面的方法调试。

    class G(models.Model):
          subscription_startdate = models.DateField(default=timezone.datetime.today().date()) 
          ...
          ...
    

    我尝试使用.values 分别访问每个字段,但我发现我的 DateField 列存在问题,因为我分配了错误的默认值

    【讨论】:

      【解决方案4】:

      由于变量命名错误,我遇到了这个问题。就我而言:

      class SomeModel(models.Model):
          User = models.ForeignKey(User, .....)
          #  other fields ...
          #       .
          #       .
          #       .
      

      这里的问题是我用大写的“U”命名了字段用户,即“用户”,这实际上是我的 django 自定义用户模型的名称,由于某种原因,django 不喜欢这样,并且生气了:p。

      所以我只是将用户字段设为小写,即:

      user = models.ForeignKey(User, .....)  # User --> user
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-12
        • 1970-01-01
        • 2018-05-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-10
        相关资源
        最近更新 更多