我正在尝试基于外键过滤对象,并且遇到了该错误。当我使用int(类别ID)时,以下代码有效。如何使它适用于字符串?
models.py:
from django.db import models
# Create your models here.
class Category(models.Model):
category_name=models.CharField(max_length=40)
def __str__(self):
return self.category_name
class dash(models.Model):
title=models.CharField(max_length=40)
card_pic=models.ImageField(upload_to="dash_pics/")
embed_tag=models.TextField()
category=models.ForeignKey(Category,on_delete=models.CASCADE)
objects = models.Manager()
def __str__(self):
return self.title
views.py:
def students(request):
stu_dashboards = models.dash.objects.filter(category='Students')
return render(request,'dashboards/students.html',{'dashboards':stu_dashboards})
答案 0 :(得分:1)
您不能使用category='Students'
进行过滤,因为category
是ForeignKey
模型的Category
。
不过,您可以使用以下方法过滤category_name
:
def students(request):
stu_dashboards = models.dash.objects.filter(category__category_name='Students')
return render(request,'dashboards/students.html',{'dashboards':stu_dashboards})
注意:通常,模型字段不带有模型名称的前缀。这使得 查询时间较长,并且通常希望使用(抽象)模型的继承来 继承字段,因此使用前缀会使它的重用性降低。因此它 将您的字段
重命名为category_name
name
可能会更好。
答案 1 :(得分:-2)
我对 Django 很陌生。对我来说,这 --> Field 'id' expected a number
<-- 因为一个愚蠢的错误而发生,
created
中 get_or_create()
的重要性,示例
foo = Foo.objects.get_or_create(some_attribute='something') # foo is actually a tuple, if it is used in another one...
Bar.objects.get_or_create(foo=foo) # this will raise this error so better to use
foo, created = Foo.objects.get_or_create(some_attribute='something')