【发布时间】:2025-11-26 22:15:02
【问题描述】:
是否可以为每个 ManyToMany 字段选项添加一个或多个 Char 字段?
我的模特:
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)
正如您在图片中看到的,我在 ManyToMany 字段中有选项。这些选项是:
- 大学 1
- 大学 2
- 大学 3
我想要的是每个选项(大学 1、大学 2、大学 3)旁边的附加文本(字符)字段。
这可能吗?
编辑 1:
当前代码:
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,
through='ThroughModel',
through_fields=('course', 'university'),
)
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)
class ThroughModel(models.Model):
course = models.ForeignKey(engineering_courses, on_delete=models.CASCADE)
university = models.ForeignKey(engineeringUni, on_delete=models.CASCADE)
additional_text = models.CharField(max_length=200)
编辑 2: 问题已修复。我没有收到表错误,因为我已经删除了迁移文件并在删除数据库(db.sqlite3)文件并再次应用迁移时,它已修复。
【问题讨论】:
-
这可能会有所帮助:docs.djangoproject.com/en/dev/topics/db/models/…。这解决了这个问题的后端。对于这种情况,我不确定在表单小部件方面是否有现成的解决方案。