Django模型:字段“ id”应该有数字,但有“学生”

时间:2020-07-15 18:36:37

标签: django django-models django-views

我正在尝试基于外键过滤对象,并且遇到了该错误。当我使用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})

2 个答案:

答案 0 :(得分:1)

您不能使用category='Students'进行过滤,因为categoryForeignKey模型的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 <-- 因为一个愚蠢的错误而发生,

createdget_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')