【问题标题】:auto update many to many field自动更新多对多字段
【发布时间】:2017-12-27 14:32:14
【问题描述】:

我有以下数据库模型

class Author(models.Model):
    choices=['Mr.','Mrs.','Er.','Dr','Prof',]
    name=models.CharField('Authors Name',max_length=50)
    dob=models.DateField('Birth Date',null=True)
    addr=models.CharField('Address',max_length=100,null=True)
    email=models.EmailField('Email',null=True)
    salutation=models.CharField('Salutation',max_length=4)
    headshot=models.ImageField(upload_to='authors/',null=True,blank=True)

    def __str__(self):
        return self.name
class Publisher(models.Model):
    name = models.CharField(max_length=30)
    address = models.CharField(max_length=50)
    city = models.CharField(max_length=60)
    state_province = models.CharField(max_length=30)
    country = models.CharField(max_length=50)
    website = models.URLField()
    def __str__(self):
        return self.name

class Book(models.Model):
    title=models.CharField(max_length=100)
    authors=models.ManyToManyField(Author)
    publisher=models.ForeignKey(Publisher)
    publication_date=models.DateField()
    pages=models.IntegerField(blank=True,null=True)
    price=models.FloatField()
    cover=models.ImageField(upload_to='books/',null=True,blank=True)

    def __str__(self):
        return self.title

Book、Author 和 Publisher 对象将从 django 管理中创建。对于创建并从作者列表中选择一个作者的每个 Book 对象,作者的书籍属性应自动更新为该作者贡献的书籍。即如果有名为 Ram、Shyam、Hari 的作者,并且如果新书对象是由作者 Shyam 和 Hari 创建的,另一个是由 Shyam 和 Ram 创建的。要求是 Shyam 的书籍字段应使用两本书对象自动更新。 怎么办?

【问题讨论】:

    标签: python django django-models


    【解决方案1】:

    你的模型是错误的,你不应该这样做。

    多对多字段已经是双向的。您应该只在一侧定义字段本身;不管你把它放在哪一个上,书或作者,但只选择一个。通过这种更改,当您将项目添加到关系的一侧时,它将自动在另一侧可见。

    【讨论】:

    • 我明白了,我已经编辑了我的问题。 author.book_set.all() 给出了所有的书集。谢谢
    猜你喜欢
    • 1970-01-01
    • 2020-08-01
    • 1970-01-01
    • 2021-06-22
    • 2012-12-01
    • 1970-01-01
    • 2020-06-24
    • 2010-11-14
    • 1970-01-01
    相关资源
    最近更新 更多