我有以下課程models.py
class Users(models.Model):
username = models.CharField('User Name', null=False, max_length = 50)
password = models.CharField('User Password', max_length=50)
def __str__(self):
return self.username
class Photo(models.Model):
name = models.CharField(max_length=100, default="Image")
id = models.AutoField(primary_key=True)
uploader = models.ForeignKey(Users, default=None, on_delete=models.CASCADE)
def __str__(self):
return self.name
class Photo_History(models.Model):
image = models.ImageField(upload_to="media/results")
upload_time = models.DateTimeField(auto_now_add=True, blank=True)
photo_id = models.ForeignKey(Photo, null=True, blank=True, on_delete=models.CASCADE)
表結構如下,
對于用戶類,
| 用戶名 | 密碼 |
|---|---|
| 美國廣播公司 | 123 |
| 十二月 | 123 |
| 約翰 | 123 |
對于攝影課,
| ID | 姓名 | 上傳者(外鍵) |
|---|---|---|
| 1 | 第一的 | 美國廣播公司 |
| 2 | 第二 | 美國廣播公司 |
| 3 | 第三 | 十二月 |
對于照片歷史課,
| 圖片 | 上傳時間 | photo_id(外鍵) |
|---|---|---|
| 影像 | 2022 年 12 月 1 日 | 1 |
| 影像 | 2022 年 12 月 3 日 | 1 |
| 影像 | 12-04-2022 | 3 |
| 影像 | 12-05-2022 | 2 |
我要訪問的是,用戶已登錄。我需要從Photo當前登錄的用戶的模型中獲取照片歷史物件以及“名稱”。
因此,假設用戶abc已登錄,那么它應該顯示以下結果,
| 姓名 | 影像 | 上傳時間 |
|---|---|---|
| 第一的 | 影像 | 2022 年 12 月 1 日 |
| 第一的 | 影像 | 2022 年 12 月 3 日 |
| 第二 | 影像 | 12-05-2022 |
我試圖尋找一種方法來使用filter函式撰寫命令來獲取它,但我找不到任何結果來顯示如何在單個查詢中從兩個不同的表中獲取資料。相反,人們提到我應該使用raw()查詢。
所以我使用了我認為完全沒問題的原始查詢,但是我得到了一個奇怪的錯誤(如果你沒有在遷移中完成,你會得到這個錯誤,但是我的遷移是很久以前完成的,并且它顯示錯誤的列,我可以在其他查??詢中輕松地從中檢索資料)
這是我的查詢功能,
def history(request):
if request.session.has_key('is_logged'):
current_user_id= request.session['user_id']
q = "select p.name, h.image, h.upload_time from firstApp_Photo_History h, firstApp_Photo p where p.uploader=%s;"
photos = Photo_History.objects.raw(q, [str(Users.objects.filter(username=current_user_id)[0])])
print("Photos: ", photos)
for p in photos:
print(p.name)
print(p.username)
print(p.upload_time)
return render(request, 'history.html', {'ID':current_user_id, 'photos':photos})
else:
return redirect('login')
當我嘗試運行它時,我收到一個錯誤
no such column: p.uploader
誰能告訴我是什么問題,我該如何解決?
這是完整的錯誤,
Quit the server with CTRL-BREAK.
Photos: <RawQuerySet: select p.name, h.image, h.upload_time from firstApp_Photo_History h, firstApp_Photo p where p.uploader=hassan;>
Internal Server Error: /history
Traceback (most recent call last):
File "E:\Hassan\Semester 8\Research\Example2\venv\lib\site-packages\django\db\backends\utils.py", line 85, in _execute
return self.cursor.execute(sql, params)
File "E:\Hassan\Semester 8\Research\Example2\venv\lib\site-packages\django\db\backends\sqlite3\base.py", line 416, in execute
return Database.Cursor.execute(self, query, params)
sqlite3.OperationalError: no such column: p.uploader
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "E:\Hassan\Semester 8\Research\Example2\venv\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
response = get_response(request)
File "E:\Hassan\Semester 8\Research\Example2\venv\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "E:\Hassan\Semester 8\Research\Example2\imageNetProject\firstApp\views.py", line 67, in history
for p in photos:
File "E:\Hassan\Semester 8\Research\Example2\venv\lib\site-packages\django\db\models\query.py", line 1514, in __iter__
self._fetch_all()
File "E:\Hassan\Semester 8\Research\Example2\venv\lib\site-packages\django\db\models\query.py", line 1501, in _fetch_all
self._result_cache = list(self.iterator())
File "E:\Hassan\Semester 8\Research\Example2\venv\lib\site-packages\django\db\models\query.py", line 1524, in iterator
query = iter(self.query)
File "E:\Hassan\Semester 8\Research\Example2\venv\lib\site-packages\django\db\models\sql\query.py", line 96, in __iter__
self._execute_query()
File "E:\Hassan\Semester 8\Research\Example2\venv\lib\site-packages\django\db\models\sql\query.py", line 136, in _execute_query
self.cursor.execute(self.sql, params)
File "E:\Hassan\Semester 8\Research\Example2\venv\lib\site-packages\django\db\backends\utils.py", line 99, in execute
return super().execute(sql, params)
File "E:\Hassan\Semester 8\Research\Example2\venv\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 "E:\Hassan\Semester 8\Research\Example2\venv\lib\site-packages\django\db\backends\utils.py", line 76, in _execute_with_wrappers
return executor(sql, params, many, context)
File "E:\Hassan\Semester 8\Research\Example2\venv\lib\site-packages\django\db\backends\utils.py", line 85, in _execute
return self.cursor.execute(sql, params)
File "E:\Hassan\Semester 8\Research\Example2\venv\lib\site-packages\django\db\utils.py", line 90, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
File "E:\Hassan\Semester 8\Research\Example2\venv\lib\site-packages\django\db\backends\utils.py", line 85, in _execute
return self.cursor.execute(sql, params)
File "E:\Hassan\Semester 8\Research\Example2\venv\lib\site-packages\django\db\backends\sqlite3\base.py", line 416, in execute
return Database.Cursor.execute(self, query, params)
django.db.utils.OperationalError: no such column: p.uploader
[24/Apr/2022 04:14:04] "GET /history HTTP/1.1" 500 128502
uj5u.com熱心網友回復:
通過 Django 檔案,我發現 Django_id在外鍵名稱的末尾添加了一個。
因此,我能夠通過更改p.uploader為p.uploader_id. 一個奇怪的問題,但這就是 Django 模型的作業方式。
最后的問題是,
q = "select h.id, p.name, h.image, h.upload_time from firstApp_Photo_History h, firstApp_Photo p where p.uploader_id=%s;"
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/465370.html
