Django:模型设计,ManyToMany 属性字段?

Posted

技术标签:

【中文标题】Django:模型设计,ManyToMany 属性字段?【英文标题】:Django: Model Design, ManyToMany attribute fields? 【发布时间】:2016-10-12 12:11:58 【问题描述】:

以这种方式处理数据库非常新。我在下面有一些示例代码。我有乐器对象,它将是乐器、吉他、钢琴等类型的数据库列表。然后用户对象将有一个 ManyToMany,因此每个用户可以在他们的个人资料中列出尽可能多的他们演奏。

我坚持的是,我希望有一个领域来体验这些乐器中的每一种。只是不确定如何在没有静态字段的情况下完成此操作,因为会有多少仪器(因为它是可修改的,所以可能会改变)。感谢您指出正确的方向。

class Instrument(models.Model):

    # Name of the instrument
    name = models.CharField(_('Name of Instrument'), blank=True, max_length=255)


    def __str__(self):
        return self.name

    class Meta:
        ordering = ('name',)

@python_2_unicode_compatible
class User(AbstractUser):

    # First Name and Last Name do not cover name patterns
    # around the globe.
    name = models.CharField(_('Name of User'), blank=True, max_length=255)
    zipcode = models.IntegerField(_('Zip Code of the User'), blank=True, null=True)
    instruments = models.ManyToManyField(Instrument)

【问题讨论】:

【参考方案1】:

似乎是 through model with extra fields 的教科书用例。

class InstrumentExperience(models.Model):
    user = models.ForeignKey('User')
    instrument = models.ForeignKey('Instrument')
    experience = models.CharField(max_length=100)

class User(AbstractUser):
    ...
    instruments = models.ManyToManyField('Instrument', through='InstrumentExperience')

【讨论】:

谢谢!正是我需要的。

以上是关于Django:模型设计,ManyToMany 属性字段?的主要内容,如果未能解决你的问题,请参考以下文章

Django 模型 ManytoMany getter

django ManyToMany 模型视图和模板

Django在ManyToMany计数上过滤模型?

django 模型:如何克服“通过”ManyToMany 选项限制

Django ORM - 模型引用另一个模型ManyToMany字段

保存自定义用户模型时 Django ManyToMany 覆盖