2016-09-06 49 views
0

我真的不知道我在做什么错> 我在我的模型中有一些ForeignKeys relatinships,我想在我的窗体管理站点中显示。我想显示我的ForeignKeys和显示在Django管理站点,但我收到以下错误:我该如何解决这个问题:<class'website.admin.UserProfileInline'>:(admin.E202)'website.Profile'没有ForeignKey为'website.Doctor'?

<class 'website.admin.UserProfileInline'>: (admin.E202) 'website.Profile' has no ForeignKey to 'website.Doctor'. 

我这里还有我的模型:

class Profile(models.Model): 
    SEX_CHOICE_MALE = 'M' 
    SEX_CHOICE_FEMALE = 'F' 

    SEX_CHOICES = (
     (SEX_CHOICE_MALE, "Male"), 
     (SEX_CHOICE_FEMALE, "Female") 
     ) 
    user = models.OneToOneField(User, on_delete=models.CASCADE, unique=True) 
    initial = models.CharField(max_length=2) 
    dob = models.CharField(max_length=8) 
    gender = models.CharField(max_length=1, choices=SEX_CHOICES, default='N/A') 
    contact_number = models.CharField(max_length=14) 
    address = models.CharField(max_length=20) 
    suburb = models.CharField(max_length=12) 
    postcode = models.IntegerField(default=0000) 

    def __str__(self): 
     return self.user.username 

    @receiver(post_save, sender=User) 
    def create_user_profile(sender, instance, created, **kwargs): 
     if created: 
      Profile.objects.create(user=instance) 

    @receiver(post_save, sender=User) 
    def save_user_profile(sender, instance, **kwargs): 
     instance.profile.save() 


class Patient(models.Model): 
    user = models.ForeignKey(Profile) 
    health_history = models.TextField() 

    def __str__(self): 
     return self.user.username 


class Doctor(models.Model): 
    user = models.ForeignKey(Profile) 
    department = models.ForeignKey('Department') 

    def __str__(self): 
     return self.user.username 


class Department(models.Model): 
    name = models.CharField(max_length=30) 

    def __str__(self): 
     return self.name 


class Appointment(models.Model): 
    TIME_SLOT = (
     (1, _("8h00 - 8h30")), 
     (2, _("8h30 - 9h00")), 
     (3, _("9h00 - 9h30")), 
     (4, _("9h30 - 10h00")), 
     (5, _("10h00 - 10h30")), 
     (6, _("10h30 - 11h00")), 
     (7, _("11h00 - 11h30")), 
     (7, _("11h30 - 12h00")), 
    ) 

    STATUS_INACTIVE = 'I' 
    STATUS_ACTIVE = 'A' 

    STATUS = (
     (STATUS_ACTIVE, "Acitve"), 
     (STATUS_INACTIVE, "Innactive") 
    ) 

    APPOINTMMENT_TYPE_ONLINE = 'O' 
    APPOINTMMENT_TYPE_PHYSICAL = 'P' 

    APPOINTMMENT_TYPE = (
     (APPOINTMMENT_TYPE_ONLINE, "Online"), 
     (APPOINTMMENT_TYPE_PHYSICAL, "Physical") 
    ) 

    status = models.CharField(choices=STATUS, default=STATUS_ACTIVE,max_length=7) 
    slot = models.CharField(default=1, choices=TIME_SLOT, max_length=10) 
    doctor = models.ForeignKey('Doctor') 
    patient = models.ForeignKey('Patient') 
    date = models.DateField(default=timezone.now, blank=True) 
    reason = models.TextField() 
    showed_up = models.BooleanField(default=False) 
    appointment_type = models.CharField(default=APPOINTMMENT_TYPE_PHYSICAL, max_length=10) 
    consultation = models.ForeignKey("Consultation") 

    def __str__(self): 
     return self.date 


class Consultation(models.Model): 
    diagnosis = models.TextField() 
    prescription = models.TextField() 

    def __str__(self): 
     return self 


class Account(models.Model): 
    patient = models.ForeignKey('Patient') 
    date = models.DateField(default=timezone.now) 
    amount = models.DecimalField(verbose_name='Due to us', max_digits=100, decimal_places=2) 

    def __str__(self): 
     return self.patient 

和我的admin.py:

from .models import (Account, Appointment, Consultation, Department, Doctor, 
        Profile, Patient) 
try: 
    admin.site.unregister(User) 
finally: 
    class UserProfileInline(admin.StackedInline): 
     model = Profile 

    @admin.register(Department) 
    class DepartmentAdmin(admin.ModelAdmin): 
     fields = [] 

    # @admin.register(Profile) 
    # class ProfileAdmin(admin.ModelAdmin): 
    #  fields = [] 

    @admin.register(Doctor) 
    class DoctorAdmin(admin.ModelAdmin): 
     fields = [] 
     inlines = [UserProfileInline] 


    @admin.register(Patient) 
    class PatientAdmin(admin.ModelAdmin): 
     fields = [] 

    @admin.register(Appointment) 
    class AppointmentAdmin(admin.ModelAdmin): 
     fields = [] 

    @admin.register(Consultation) 
    class ConsultationAdmin(admin.ModelAdmin): 
     fields = [] 

    @admin.register(Account) 
    class AccountAdmin(admin.ModelAdmin): 
     fields = [] 

我希望得到任何帮助

回答

2

错误描述说明了一切:

'website.Profile' has no ForeignKey to 'website.Doctor' 

你有两种可能性:

  1. 添加ForeignKey的以剖面模型:doctor = models.OneToOneField(Doctor)
  2. 删除inlines = [UserProfileInline]DoctorAdmin

编辑

更好的选择是让Profile模型摘要并继承PatientDoctor模型从Profile

models.py

class Profile(models.Model): 
    SEX_CHOICE_MALE = 'M' 
    SEX_CHOICE_FEMALE = 'F' 

    SEX_CHOICES = (
     (SEX_CHOICE_MALE, "Male"), 
     (SEX_CHOICE_FEMALE, "Female") 
     ) 
    user = models.OneToOneField(User, on_delete=models.CASCADE, unique=True) 
    initial = models.CharField(max_length=2) 
    dob = models.CharField(max_length=8) 
    gender = models.CharField(max_length=1, choices=SEX_CHOICES, default='N/A') 
    contact_number = models.CharField(max_length=14) 
    address = models.CharField(max_length=20) 
    suburb = models.CharField(max_length=12) 
    postcode = models.IntegerField(default=0000) 

    class Meta(object): 
     abstract = True 

    def __str__(self): 
     return self.user.username 


class Patient(Profile): 
    health_history = models.TextField() 

    def __str__(self): 
     return self.user.username 


class Doctor(Profile): 
    department = models.ForeignKey('Department') 

    def __str__(self): 
     return self.user.username 

admin.py

@admin.register(Doctor) 
    class DoctorAdmin(admin.ModelAdmin): 
     fields = [] 


    @admin.register(Patient) 
    class PatientAdmin(admin.ModelAdmin): 
     fields = [] 
+0

这就是我真的不明白。我创建了Profile模型以便Doctor和Patient继承,因为它们都有许多共同的字段。 –

相关问题