【问题标题】:M2M django with more attributes具有更多属性的 M2M django
【发布时间】:2016-03-31 20:33:58
【问题描述】:

我对使用 django 的 M2M 有点困惑,我有以下问题:

每个用户都可以拥有太多的技能,而每个技能用户必须选择体验时间。我的意思是,django-1 年,Heroku-3 年,诸如此类,我怎样才能在 django 中实现呢?

我的模型:

class Specialities(models.Model):
    name = models.CharField(max_length=100)

    def __unicode__(self):
        return self.name


class Experience(models.Model):
    specialities = models.ManyToManyField('self',through='RegisterProfessional',symmetrical = False)
    years = models.CharField(max_length=100)

    def __unicode__(self):
        return self.years

class RegisterProfessional(models.Model):
    id_document = models.OneToOneField(User)
    specialities = models.ForeignKey(Specialities)
    anios = models.ForeignKey(Experience)

我该如何修复我的模型以实现这一目标?

【问题讨论】:

    标签: django django-models m2m


    【解决方案1】:

    我会尽量简化:

    class Speciality(models.Model):
        name = models.CharField(max_length=100)
    
        def __unicode__(self):
            return self.name
    
    
    class User(models.Model):
        specialities = models.ManyToManyField('self',through='RegisterProfessional',symmetrical = False)
    
    
    class RegisterProfessional(models.Model):
        id_document = models.ForeignKey(User)
        speciality = models.ForeignKey(Speciality)
        years = models.CharField(max_length=100)
    
        class Meta(object):
            unique_together = ('id_document', 'speciality')
    

    对于用户,如果您是指 django 身份验证用户,there is a way to extend it easily 能够直接向 User 模型添加专业。

    【讨论】:

    • 感谢您的回复。这是我很困惑的地方,为什么在 RegisterProfessional 专业中使用 FK?如何在 RegisterProfessional 中添加多个专业?...在​​ User 模型的管理中没有出现任何字段。
    • 它必须是一个外键,RegisterProfessional 是在UserSpeciality 之间建立m2m 关系的连接表。在管理员上,您必须使用 TabularInline,如文档 docs.djangoproject.com/en/dev/ref/contrib/admin/… 中所述,您将能够为用户添加许多专业。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-04
    • 2015-06-07
    • 1970-01-01
    相关资源
    最近更新 更多