我是django的新手,正在研究rest API框架。我想要询问用户某些细节,以html格式,如流行度,一些书的名称。
一本书可以属于各种类别,如摩擦,浪漫,行动。 所以我想要一个列表字段类别。 可以给出两个选项,一个请求用户输入类别并在后端的列表中追加。或者提供用户可以选择的列表。
在model.py
中尝试了以下代码from django.db import models
class Category(models.Model):
category = models.CharField(max_length=100)
def __str__(self):
return self.category
class Books(models.Model):
name = models.CharField(max_length=100)
date = models.DateTimeField()
category = models.ManyToManyField(Category)
#category = models.ForeignKeyField(Category) #tried Foreign key Model Field also
def __str__(self):
return self.name
请帮帮我。这是正确的方法还是应该尝试其他方法 提前谢谢。
它的工作正常,但它不是在管理面板上显示值,而是在图书模型表中显示类别对象。
[
{
"name": "Harry Potter",
"date": 03-03-2014,
"category": 6
}
]
在类别6处,String值为“Magical”
我错过了什么
答案 0 :(得分:0)
是的,我认为这种方法对于ManyToManyField是正确的,因为一本书可能有这么多类别,而一个类别可能有这么多书。
from django.db import models
class Category(models.Model):
category = models.CharField(max_length=100)
def __str__(self):
return self.category
class Books(models.Model):
name = models.CharField(max_length=100)
date = models.DateTimeField()
category = models.ManyToManyField(Category)
def __str__(self):
return self.name
答案 1 :(得分:0)
每本书只属于一个类别(或类型),所以你需要的是一个外键(不是很多关系)。您的Book
模型应如下所示:
class Book(models.Model):
title = models.CharField(max_length=100)
publication_date = models.DateTimeField()
category = models.ForeignKey(Category, on_delete=models.CASCADE)
def __str__(self):
return self.title
备注:强>
publication_date
或published
而不是date
来防止date
隐藏datetime
,以防您从on_delete=models.CASCADE
模块导入示例