模型中的列表字段 - Django

时间:2017-08-16 10:17:20

标签: python django django-rest-framework

我是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”

我错过了什么

2 个答案:

答案 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_datepublished而不是date来防止date隐藏datetime,以防您从on_delete=models.CASCADE模块导入示例
  • 一本书以其标题为特征(所以最好拨打第一个字段标题而不是名字)
  • {{1}}表示如果删除某个类别,其所有相关图书也将被删除。