django建立了一个作者到多个图书的关系



我试图在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)

相关内容

最新更新