django将一个作者与多个书籍的关系建模
我正在尝试在models.py上与Django建立关系。一位作者可能是书店项目的多本书的作者。请在下面找到models.py的外观。恐怕它不能正常工作。多谢各位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
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'
,让作者参考作者的作品似乎是不对的