【发布时间】:2022-01-24 10:49:58
【问题描述】:
我的models.py 中有 2 个模型。他们是Doctor和Specialty:
class Doctor(models.Model):
name = CharField(max_length=255)
specialties = ManyToManyField('Specialty', related_name='doctors')
mc_id = CharField(max_length=255, unique=True)
class Specialty(models.Model):
name = CharField(max_length=255)
mc_id = CharField(max_length=255, unique=True)
def __str__(self):
return self.name
当我通过管理界面(change_form.html 模板)创建新的 Doctor 实例时,我看到了我的 Doctor 模型字段,我应该在其中填充数据。在这些字段中,有一个字段 specialties ("Cпециальности"),它是 m2m 字段,包含 names(正如我设置的 __str__(self) 方法在 Specialty 模型中返回 self.name) 以获取之前添加到 Specialty 模型 (see a screen) 的 specialties。
我只想在这个列表中看到专业名称,以及 Specialty 模型的 mc_id 字段的值,但它我不应该以这样的代价来做到这一点:
class Specialty(models.Model):
name = CharField(max_length=255)
mc_id = CharField(max_length=255, unique=True)
def __str__(self):
return self.name + '(' + self.mc_id + ')'
我认为我可以通过在admin.py 中覆盖我的管理模型(与Doctor 模型相关联)中的formfield_for_manytomany() 方法来实现:
@admin.register(Doctor)
class DoctorAdmin(admin.ModelAdmin):
def formfield_for_manytomany(self, db_field, request, **kwargs):
if db_field.name == "specialties":
queryset = Specialty.objects.all()
for specialty in queryset:
specialty.name += '(' + {specialty.mc_id} + ')'
return super().formfield_for_manytomany(db_field, request, **kwargs)
没有用。我想知道如何解决我的问题。提前谢谢你。
更新:我还想以用户相关的形式制作 specialties 字段的内容:
- 如果 superuser 尝试添加新医生,他将在表单值的 specialties 字段中看到,例如:
- 内科 (mc1_id)
- 神经科 (mc1_id)
- 心脏病学 (mc2_id)
- 如果普通用户名称为“mc1_id”尝试添加新医生,他将在按其姓名过滤的表单值中看到不带“(mc_id)”部分的值。喜欢:
- 内科
- 神经内科
【问题讨论】: