首页 > 解决方案 > OperationalError,没有这样的列:hospi_treatmentgiven.patient_id

问题描述

我有三个模型:Patient、Ipd、TreatmentGiven,并且每个模型都使用 ForeignKey 连接到另一个模型,并且迁移也成功运行,但是当我尝试从管理员手动添加 TreatmentGiven 时,我收到 OperationalError,没有这样的列:hospi_treatmentgiven .patient_id

class Patient(models.Model): 

    firstname = models.CharField(max_length=200)
    lastname = models.CharField(max_length=200)
    phone = models.CharField(max_length=20)
    alternate_phone = models.CharField(max_length=20)
    address = models.TextField()
    patient_id = models.AutoField(primary_key=True)
    gender= models.CharField(max_length=6, choices=Gender)
 class Ipd(models.Model):

    patient = models.ForeignKey(Patient,on_delete=models.CASCADE,blank=True)
    reason_admission = models.CharField(max_length=200, blank=True)
    provisional_diagnosis = models.CharField(max_length=200,)
    ipd_id = models.AutoField(primary_key=True)
    weight =  models.CharField(max_length=10,blank = True)
    bill_responsible = models.CharField(max_length=100,blank = True)
    bill_relation =  models.CharField(max_length=100,blank = True)
    rooms = models.ForeignKey(Rooms,on_delete=models.CASCADE, blank=True)
    date_of_admission = models.DateField(("Date"), default=datetime.date.today)  
    condition_admission = models.CharField(max_length=20, choices=Admission_condition)
    consultant =  models.CharField(max_length=20, choices=Consultant)

    def __str__(self):
        return self.patient.firstname

class TreatmentGiven(models.Model):
    patient = models.ForeignKey(Ipd,on_delete = models.CASCADE,default = None)
    medicine_name = models.CharField(max_length = 100,null = True)
    types_of_doses = models.CharField(max_length = 100,null = True)
    route = models.CharField(max_length = 100,null = True)
    number_of_days = models.IntegerField(null = True)

错误 :


[15/Aug/2019 09:32:07] "GET /admin/ HTTP/1.1" 200 8532
Internal Server Error: /admin/hospi/treatmentgiven/
Traceback (most recent call last):
  File "C:\django-projects\env\lib\site-packages\django\db\backends\utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "C:\django-projects\env\lib\site-packages\django\db\backends\sqlite3\base.py", line 383, in execute
    return Database.Cursor.execute(self, query, params)

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
    response = get_response(request)
  File "C:\django-projects\env\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\django-projects\env\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\django-projects\env\lib\site-packages\django\contrib\admin\options.py", line 606, in wrapper
    return self.admin_site.admin_view(view)(*args, **kwargs)
  File "C:\django-projects\env\lib\site-packages\django\utils\decorators.py", line 142, in _wrapped_view
    response = view_func(request, *args, **kwargs)
  File "C:\django-projects\env\lib\site-packages\django\views\decorators\cache.py", line 44, in _wrapped_view_func
    response = view_func(request, *args, **kwargs)
  File "C:\django-projects\env\lib\site-packages\django\contrib\admin\sites.py", line 223, in inner
    return view(request, *args, **kwargs)
  File "C:\django-projects\env\lib\site-packages\django\utils\decorators.py", line 45, in _wrapper
    return bound_method(*args, **kwargs)
  File "C:\django-projects\env\lib\site-packages\django\utils\decorators.py", line 142, in _wrapped_view
    response = view_func(request, *args, **kwargs)
  File "C:\django-projects\env\lib\site-packages\django\contrib\admin\options.py", line 1790, in changelist_view
    'selection_note': _('0 of %(cnt)s selected') % {'cnt': len(cl.result_list)},
  File "C:\django-projects\env\lib\site-packages\django\db\models\query.py", line 256, in __len__
    self._fetch_all()
  File "C:\django-projects\env\lib\site-packages\django\db\models\query.py", line 1242, in _fetch_all
    self._result_cache = list(self._iterable_class(self))
  File "C:\django-projects\env\lib\site-packages\django\db\models\query.py", line 55, in __iter__
    results = compiler.execute_sql(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size)
  File "C:\django-projects\env\lib\site-packages\django\db\models\sql\compiler.py", line 1100, in execute_sql
    cursor.execute(sql, params)
  File "C:\django-projects\env\lib\site-packages\django\db\backends\utils.py", line 99, in execute
    return super().execute(sql, params)
  File "C:\django-projects\env\lib\site-packages\django\db\backends\utils.py", line 67, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
  File "C:\django-projects\env\lib\site-packages\django\db\backends\utils.py", line 76, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "C:\django-projects\env\lib\site-packages\django\db\backends\utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "C:\django-projects\env\lib\site-packages\django\db\utils.py", line 89, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "C:\django-projects\env\lib\site-packages\django\db\backends\utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "C:\django-projects\env\lib\site-packages\django\db\backends\sqlite3\base.py", line 383, in execute
    return Database.Cursor.execute(self, query, params)
django.db.utils.OperationalError: no such column: hospi_treatmentgiven.patient_id

标签: pythondjango

解决方案


在您的TreatmentGiven班级中,您指向的Ipd是 ForeignKey。

 TreatmentGiven(models.Model):
    patient = models.ForeignKey(Ipd,on_delete = models.CASCADE,default = None)
                              # ^^^

这将创建一个列ipd_id而不是patient_id. 我假设你想这样做: patient = models.ForeignKey(Patient,on_delete = models.CASCADE,default = None)


推荐阅读