Django:为每个ManyToMany Field选项添加更多字段

时间:2017-09-04 10:25:17

标签: python django

是否可以为每个ManyToMany字段选项添加一个或多个字符字段?

enter image description here

我的模特:

avconv version 9.20-6:9.20-0ubuntu0.14.04.1, Copyright (c) 2000-2014 the Libav developers built on Dec  7 2016 21:22:31 with gcc 4.8 (Ubuntu 4.8.4-2ubuntu1~14.04.3) 
/tmp/tmpGhtAOn: Operation not permitted

正如您在图像中看到的,我在ManyToMany字段中有选项。这些选项是:

  • 大学1
  • 大学2
  • 大学3

我想要的是每个选项(大学1,大学2,大学3)旁边的附加文本(字符)字段。

这可能吗?

编辑1:

当前代码:

class engineeringUni(models.Model):
    field2 = models.CharField(max_length=200)
    des_eng = models.CharField(max_length=1000, default='Add description')


    def __str__(self):
        return self.field2

    def description_eng_universities(self):
        return self.des_eng

class engineering_courses(models.Model):
    course_name = models.CharField(max_length=400)
    course_description = models.CharField(max_length=1000, default='This is a description')
    course_offered_by = models.ManyToManyField(engineeringUni, related_name='course_offered_by')
    course_duration = models.IntegerField(blank=False, default='2')

    def __str__(self):
        return self.course_name

    def description_course(self):
        return self.course_description

    def offered_by_courses(self):
        return self.course_offered_by

    def duration_courses(self):
        return str(self.course_duration)

编辑2:问题已解决。我没有表错误,因为我删除了迁移文件和删除数据库(db.sqlite3)文件并再次应用迁移,它已修复。

2 个答案:

答案 0 :(得分:2)

再看一下arjun27答案中引用的django文档。你的ThroughModel中有多个外键,所以django很困惑。尝试在engineering_course模型中指定贯穿字段,迁移更改,看看是否有效。

标记

答案 1 :(得分:1)

您可以在ManyToManyField(docs)中使用through模型。此模型可用于存储任何其他字段。

class engineering_courses(models.Model):
    # ...
    course_offered_by = models.ManyToManyField(engineeringUni, related_name='course_offered_by', through='ThroughModel')


class ThroughModel(models.Model):
    course = models.ForeignKey(engineering_courses)
    university = models.ForeignKey(engineeringUni)
    additional_text = models.CharField()