1
votes

How can I create OrderUser model containing subfields of User model that are desired:

  • first_name
  • last_name
  • email

I want to avoid manually copying fields' structure from django.contrib.auth.models AbstractUser like

class OrderUser(models.Model):
    first_name = models.CharField(_('first name'), max_length=30, blank=True)
    last_name = models.CharField(_('last name'), max_length=30, blank=True)
    email = models.EmailField(_('email address'), blank=True)

I wonder if there is any way to write something like this:

class OrderUser(models.Model):
    first_name = User.fields.first_name
    last_name = User.fields.last_name
    email = User.fields.email

Usually, if I want two models to have the same fields, I use Abstract Model inheritance. But inheriting from AbstractUser leads to many unnecessary fields like username, is_staff, is_active and so on.

1

1 Answers

1
votes

Ok, my bad, I finally found an answer to my own question, maybe it will be helpful for someone else.

The _meta property worked for me:

class OrderUser(models.Model):
    first_name = User._meta.get_field_by_name('first_name')[0]
    last_name = User._meta.get_field_by_name('last_name')[0]
    email = User._meta.get_field_by_name('email')[0]

More discussion about _meta: