最初に抽象を拡張することで、Django のユーザー クラスを拡張しました。
class XUserAbstract(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(
db_index=True,
verbose_name='email address',
max_length=255
)
# ...
class Meta:
verbose_name = "User"
verbose_name_plural = "Users"
abstract = True
次に、次の方法でこの抽象からサブクラスを作成しました。
class XUser(XUserAbstract):
class Meta(XUserAbstract.Meta):
swappable = 'AUTH_USER_MODEL'
独自のユーザー クラスを作成した後、そこからサブクラスを作成し、FK からアプリケーションへのモデルを作成しました。
class Merchant(XUser):
app = models.ForeignKey(Application)
# ...
class Meta:
verbose_name = _('merchant')
問題は、Merchant 内で一意のペアを作成したかったときに、それを行うことができなかったことです。Merchant.app と XUser.email で一意のペアを作成したかったのですが、答えを探しましたが、User クラスもその抽象 (?) から継承したため、解決策は私のケースを修正していませんでした。私が見つけたサブクラスに一意のペアを追加する解決策は次のとおりです。
unique_together = ('app', 'user__email')
しかし、うまくいきません。エラー:
main.business: "unique_together" refers to user__email, a field that doesn't exist.
私もそれらを試しました:
unique_together = ('app', 'xuser__email')
unique_together = ('app', 'email')
2 行目に次のエラーが表示されます。
main.business: "unique_together" refers to email. This is not in the same model as the unique_together statement.
それらも機能しません。
足りないものはありますか?