Джанго вопрос наследования - PullRequest
0 голосов
/ 07 июля 2011

какое-то тело, пожалуйста, объясните мне следующее, у меня есть два класса: Userprofile и Staff.staff наследуют userprofile

Мой вопрос заключается в том, что если необходимо сделать какую-либо запись в таблице персонала.заполните детали профиля пользователя, верно?

Пожалуйста, объясните это наследство. Спасибо

  class Profile(models.Model):
     user = models.ForeignKey(User, unique=True)
     created_date = models.DateTimeField(auto_now_add=True)
     emp_first_name = models.CharField(max_length=255)
     emp_last_name = models.CharField(max_length=255)
     gender = models.CharField(max_length=2, choices = GENDER_CHOICES, null=False)
     date_of_birth = models.DateField(blank=True,null=True)
     address1 = models.CharField(max_length=255)
     city = models.CharField(max_length=48)
     state = models.CharField(max_length=48)
     country = models.CharField(max_length=48)
     email_id = models.EmailField(blank=True)


  class Staff(UserProfile):
     role = models.ManyToManyField(Role)
     designation = models.CharField(max_length=48, blank=True, null=True)
     education = models.CharField(max_length=255, blank=True, null=True)

1 Ответ

3 голосов
/ 07 июля 2011

Если вы посмотрите на https://docs.djangoproject.com/en/dev/topics/db/models/#multi-table-inheritance, вы увидите, что создаются автоматические сопоставления «один к одному».Поэтому запись для UserProfile сохраняется, а запись для персонала сохраняется с полем OneToOne, которое указывает на запись UserProfile.

Однако, если вы хотите, чтобы Staff просто наследовал все поля, я бы рекомендовалустановка abstract = True в вашем профиле пользователя.Это означает, что Staff наследует все эти поля, но вы никогда не сможете создать UserProfile самостоятельно (как описано в https://docs.djangoproject.com/en/dev/topics/db/models/#abstract-base-classes)

    class Meta:
        abstract = True
...