django将一个作者与多个书籍的关系建模

django将一个作者与多个书籍的关系建模,django,Django,我正在尝试在models.py上与Django建立关系。一位作者可能是书店项目的多本书的作者。请在下面找到models.py的外观。恐怕它不能正常工作。多谢各位 from django.db import models from django.utils import timezone from django.urls import reverse # Create your models here. class Category(models.Model): # books categori

我正在尝试在models.py上与Django建立关系。一位作者可能是书店项目的多本书的作者。请在下面找到models.py的外观。恐怕它不能正常工作。多谢各位

from django.db import models
from django.utils import timezone
from django.urls import  reverse
# Create your models here.
class Category(models.Model): # books categories

    name = models.CharField(max_length=200,db_index=True)
    slug = models.SlugField(max_length=200,unique=True)
    
    class Meta:
        ordering = ('name',)
        verbose_name = 'category'
        verbose_name_plural = 'categories'

    def __str__(self):
        return self.name
    
    def get_absolute_url(self):
        return reverse('category_detail',args=[self.slug])


class Product(models.Model): # books as products
    category = models.ForeignKey(Category,related_name='products',on_delete=models.CASCADE)
    author = models.ForeignKey(Author,related_name='authors',on_delete=models.CASCADE) 
    book_id = models.CharField(max_length=10, db_index=True, blank=True) 
    name = models.CharField(max_length=200, db_index=True)
    slug = models.SlugField(max_length=200, db_index=True)
    image = models.ImageField(upload_to='products/%Y/%m/%d',blank=True)
    image2 = models.ImageField(upload_to='products/%Y/%m/%d',blank=True)
    image3 = models.ImageField(upload_to='products/%Y/%m/%d',blank=True)

    description = models.TextField(blank=True)
    price = models.DecimalField(max_digits=10, decimal_places=2)
    available = models.BooleanField(default=True)
    created = models.DateTimeField(default=timezone.now)
    updated = models.DateTimeField(auto_now=True)
    
    class Meta:
        ordering = ('-created',)
        index_together = (('id', 'slug'),)
    
    def __str__(self):
        return self.name

    def get_absolute_url(self):
        return reverse('product_detail',args=[str(self.slug)])
      

class Author(models.Model): # book's author
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)

    def __unicode__(self):
        return self.first_name + " " + self.last_name

构建一对多模型的方法如下:

class Parent(models.Model):
    name = models.CharField(max_length=50)
外键将进入子类,因为一个父类可以有多个子类,但子类只能有一个父类。因此,具有的每个子对象都有一个指向父对象的外键

相关名称通常是持有外键的类的复数形式(在本例中为“children”)。一个模型可以有多个外键指向不同的模型,例如,孩子可能有两个外键供祖父和祖母使用

class Child(models.Model):
    parent = models.ForeignKey(Parent, related_name='children')
    name = models.CharField(max_length=50)

产品
模型上定义一个
外键
作者
,并删除
作者
上的
产品
字段。你的关系是错误的,我可以在产品模型上有两个外键,一个是类别,另一个是作者?谢谢。是的,您可以拥有任意数量的外键。如果您有作者,您可以使用
author.product\u set.all()
by default查看他们的所有书籍。尽管您可能希望
author
字段中的
related\u name='products'
,让作者参考作者的作品似乎是不对的