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

时间:2016-06-11 17:30:42

标签: sql django database models

以这种方式使用数据库相当新鲜。我在下面有一些示例代码。我已经获得了仪器对象,它将是一个类型的乐器,吉他,钢琴等的数据库列表。然后用户对象将具有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 个答案:

答案 0 :(得分: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')