【发布时间】:2016-10-27 16:13:36
【问题描述】:
在 django-admin 中,我尝试将 User django 类的具体字段添加到两个自定义模型 Practitionner 和 Patient 中。 p>
在视觉上,在 django 管理界面上,当我点击 Patient 时,我需要有 User + Patient 字段,对于 Practitionner 也是如此。而不是创建两个用户 + 一个患者 + 一个从业者并手动建立关系。
这是两个模型的代码:
class Practitioner(models.Model):
user = models.OneToOneField(User)
phone = models.CharField(max_length=15, verbose_name="Numéro de téléphone professionel")
office = models.ForeignKey(locals.Office)
exams = models.ManyToManyField(exams.Exam)
def __str__(self):
return self.user.first_name + " " + self.user.last_name
class Patient(models.Model):
user = models.OneToOneField(User)
phone = models.CharField(max_length=15, verbose_name="Numéro de téléphone fixe")
mobile_phone = models.CharField(max_length=15, verbose_name="Numéro de téléphone portable")
birth_date = models.DateField(verbose_name="Date de naissance")
city = models.CharField(max_length=100, verbose_name="Ville")
country = models.CharField(max_length=50, verbose_name="Pays")
streetNumber = models.PositiveSmallIntegerField(verbose_name="N°")
streetName = models.CharField(max_length=100, verbose_name="Nom")
postalCode = models.CharField(max_length=10, verbose_name="Code postal")
def __str__(self):
return self.user.first_name + " " + self.user.last_name
下面的代码代表了这个想法,我使用了 inline 系统但它是无效的,因为用户没有 Practitionner 的外键:
class UserInline(admin.StackedInline):
model = User
class PractitionerAdmin(admin.ModelAdmin):
inlines = [UserInline]
admin.site.register(Practitioner, PractitionerAdmin)
提前致谢。
【问题讨论】:
-
您能否详细说明“反向操作”的问题?很高兴看到
Patient和Practitioner的模型定义。你说这是“因为我有另一个模型 Patient,它也使用 User 模型,它们需要在两个不同的地方。” 1.听起来可能应该有一个从Patient到Practitioner的外键。 2. 这是否可以通过使用related_name属性来解决,这样反向访问器就不会发生冲突? -
为什么要在 OneToOne 字段上使用内联?这对我来说没有意义!如果您想将 User 模型的字段添加到您的 Practioner 模型中,为什么不让它继承自 User: class Practionser(User): - 那么这些字段将显示在管理员中。
-
@ger.s.brett 我遵循了文档:docs.djangoproject.com/en/1.10/topics/auth/customizing/…,所以我偷了同样的想法。我尝试从 User 类继承 Practionner,但是这样它就不会继续使用数据库中的 User 表了。
-
@nimasmi 是的,抱歉,我已经用您提出的信息更新了问题帖子。
标签: python django django-models django-admin