简体   繁体   中英

Django ForeignKey to AbstractBaseUser

I'm trying to set up an app that will handle reviews about registered users. So in my Review model, I want to have a ForeignKey to my User model.

I'm using a custom user profile that looks like this:

#In /profiles/models.py
class MyUser(AbstractBaseUser):
    email = models.EmailField(
        verbose_name='email address',
        max_length=255,
        unique=True,
    )
    company = models.CharField(default="", max_length=200)
    is_active = models.BooleanField(default=True)
    is_admin = models.BooleanField(default=False)

    objects = MyUserManager()

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['company']

I have included it with settings.py AUTH_USER_MODEL = "profiles.MyUser". It works fine with registration, creating users etc. So I know its working.

In my review model I write the following:

class Review(models.Model):
    company = models.ForeignKey(settings.AUTH_USER_MODEL)
    reviewer = models.ForeignKey(Reviewer)
    rating = models.IntegerField(default=0)
    review = models.TextField()
    pub_date = models.DateTimeField('date published')

Instead of settings.AUTH_USER_MODEL I have also tried writing profiles.MyUser, 'profiles.MyUser' and MyUser.

I can successfully use the python manage.py makemigrations reviews command. But when I do python manage.py migrate I get errors no matter what version I use above.

The error I get is the following:

ValueError: Lookup failed for model referenced by field reviews.Review.company: profiles.MyUser

nejc92 comment was correct. I had migrated my database earlier before I set AUTH_USER_MODEL for the first time.

I removed my whole database and created new migrations for all apps and migrated everything again from scratch. It then worked.

Sounds like a bug(?) to me.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM