【问题标题】:Django: unhashable type:'list' errorDjango:不可散列的类型:'list'错误
【发布时间】:2019-01-07 06:12:14
【问题描述】:

我正在处理 Django 2 项目。我有一个以前没有遇到过的错误。 HTML 页面:

<body>
<h1>Postlar burada görüntüleniyor</h1>
<a href="{% url 'postlar:post_olustur' %}">Post Oluştur</a>
{% for post in listelenen_postlar %}
<br>
<a href="{% url 'postlar:post_detay' post.id  %}">{{post.başlık}}</a>
<br>
{{post.içerik}}
<br>
{{post.olusturma_zamanı}}/////////////////{{post.olusturma_zamanı|timesince}} ago
<br>
{{post.güncelleme_zamanı}}
<br>   
{% endfor %}

视图.py

def post_listele(request):
 listelenen_postlar = Post.objects.all()
 context ={"listelenen_postlar":listelenen_postlar}
 return render(request,"postlar/post_listele.html",context)

urls.py 在我的应用程序中:

urlpatterns = [
url(r'^$',view=post_listele, name="post_listele"),
url(r'^post_olustur/$',view=post_olustur, name='post_olustur'),
url(r'^post_detay/(?P<id>[0-9]+)$',view=post_detay, name='post_detay'),]

这是错误:

TypeError at /postlar/
unhashable type: 'list'
Request Method: GET
Request URL:    http://127.0.0.1:8000/postlar/
Django Version: 2.0.7
Exception Type: TypeError
Exception Value:    
unhashable type: 'list'
Exception Location: C:\Users\mete\Desktop\blog_deneme\venv\lib\site-packages\django\db\models\sql\compiler.py in get_order_by, line 290
Python Executable:  C:\Users\mete\Desktop\blog_deneme\venv\Scripts\python.exe
Python Version: 3.6.4
Python Path:    
['C:\\Users\\mete\\Desktop\\blog_deneme\\blog',
 'C:\\Users\\mete\\Desktop\\blog_deneme\\venv\\Scripts\\python36.zip',
 'C:\\Users\\mete\\Desktop\\blog_deneme\\venv\\DLLs',
 'C:\\Users\\mete\\Desktop\\blog_deneme\\venv\\lib',
 'C:\\Users\\mete\\Desktop\\blog_deneme\\venv\\Scripts',
 'c:\\python\\Lib',
 'c:\\python\\DLLs',
 'C:\\Users\\mete\\Desktop\\blog_deneme\\venv',
 'C:\\Users\\mete\\Desktop\\blog_deneme\\venv\\lib\\site-packages']
Server time:    Mon, 30 Jul 2018 22:50:33 +0000

谢谢..

这是我的model.py

class Post(models.Model):
başlık = models.CharField(max_length=120,blank=False,verbose_name="Başlık")
içerik = models.CharField(max_length=220,verbose_name="İçerik")
olusturma_zamanı = models.DateTimeField(auto_now_add=True)
güncelleme_zamanı = models.DateTimeField(auto_now=True)

def __str__(self):
    return "{}".format(self.başlık)
class Meta:
    verbose_name_plural="Gönderilerim"
    ordering = ["id"],

【问题讨论】:

  • 你不能在 python 中散列列表。但是,您可以改为散列元组。
  • ordering = ["id"],ordering = (["id"],) 相同。您实际上是在创建一个列表元组。

标签: python django django-templates django-2.0


【解决方案1】:

看起来 Django 无法理解如何订购您的查询集...

尝试从以下位置更改您的 Meta 类值:

ordering = ["id"],

ordering = ["id",]

【讨论】:

  • 非常感谢。我工作了几个小时,但我找不到它。再次感谢:)
  • 您发送的错误消息中有一条线索:Exception Location: C:\Users\mete\Desktop\blog_deneme\venv\lib\site-packages\django\db\models\sql\compiler.py in get_order_by - 仔细阅读这些消息可以帮助您找出问题所在:)
猜你喜欢
  • 2017-12-27
  • 1970-01-01
  • 2011-07-29
  • 2018-08-03
  • 2021-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-29
相关资源
最近更新 更多