Python 模型中的列表字段--Django

Python 模型中的列表字段--Django,python,django,django-rest-framework,Python,Django,Django Rest Framework,我是django的新手,致力于RESTAPI框架。我想要求用户以html格式输入某些详细信息,如受欢迎程度、某本书的名称 一本书可以属于不同的类别,如摩擦、浪漫、动作。 所以我想要一个分类列表字段。 可以提供两个选项,一个要求用户输入类别并在后端的列表中追加。或者提供一个用户可以选择的列表 已在model.py中尝试了以下代码 from django.db import models class Category(models.Model): category = models.Cha

我是django的新手,致力于RESTAPI框架。我想要求用户以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
请帮帮我。这是正确的方法还是应该尝试其他方法。
提前谢谢

它工作正常,但不是在管理面板上显示值,而是在Books模型表中显示Category对象

[
  {
    "name": "Harry Potter",
    "date": 03-03-2014,
    "category": 6
  }
]
在第6类中,字符串值为“神奇”


是的,我认为这种方法在很多领域都是正确的,因为一本书可能有很多类别,而一个类别可能有很多书

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

每本书只属于一个类别(或流派),所以您需要的是外键(不是多对多关系)。您的
书籍
型号应如下所示:

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
注意事项:

  • 例如,如果您从
    datetime
    模块导入日期,最好使用
    publication\u date
    published
    而不是
    date
    来隐藏日期
  • 一本书的特点是它的标题(因此最好叫第一个字段标题而不是名字)
  • on_delete=models.CASCADE
    意味着如果一个类别被删除,其所有相关书籍也将被删除

嗨,埃塔纳尼,我之前试过外键,但它不起作用,这就是为什么从外键切换到多个字段的原因。显示的错误是项目名称。类别id可能不为空。什么是
项目名称
?一个
类别
实例?不,似乎不是这样。project_name是应用程序名称。Category是我在model.py中创建的CLS,与提及的代码相同。根据我的理解,Category_id是自动生成的吗?对吗?甚至我也再次迁移了模型,在那之后,它说了一个错误:没有这样的列:project\u name.category\u id。。不明白这里发生了什么。是的,你走的方向是正确的。模型声明似乎符合您的需要。我建议你也使用“相关名称”。category=models.ManyToManyField(category,related_name='some_rel_name')Thanx Ankur,我使用的是ForeignKey字段,但其作为book_api.category_id给出的错误可能不为空。你知道吗?多对多领域似乎非常适合你的情况。为什么选择外键呢。无论如何,对于声明的外键,您必须尝试插入或更新Books记录,但没有为类别外键提供正确的值。是这样吗?不,它说category_id列不存在。根据我的理解,category_id列是自动生成的。我们并不是为每个类模型都定义它。对吗?