Обновление DJANGO is_active при проверке email_confirmed
В интерфейсе администратора Django, когда я проверяю email_confirmed в модели Profile, есть ли способ автоматически обновить is_active в модели Djangos authentication User? Связывая их вместе в некотором роде. Хотелось бы иметь возможность проверять обе модели одним кликом, если пользователь не получил письмо о регистрации.
Profile.py
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
unique_id = models.UUIDField(null=False, blank=False, default=uuid.uuid4, unique=True, editable=False)
email_confirmed = models.BooleanField(default=False)
def __str__(self):
return self.user.username
admin.py
@admin.register(Profile)
class ProfileAdmin(admin.ModelAdmin):
list_display = ('user', 'email_confirmed')
search_fields = ('user__email',)
readonly_fields = ('user', 'unique_id')
fieldsets = (
('Details', {
'fields': ('unique_id', 'user')
}),
('Status', {
'fields': ('email_confirmed')
}),
('Timezone', {
'fields': ('timezone')
}),
)
Я изучил использование @reciever(setting_changed) в Profile.py, но не совсем понял. Аналогично я рассмотрел следующее в admin.py, и пытался установить is_active в true, но безрезультатно.
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == "email_confirmed":
Заранее благодарю за помощь
Вам нужно переопределить метод save для этого и сохранить модель пользователя, когда письмо будет подтверждено.
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
unique_id = models.UUIDField(null=False, blank=False, default=uuid.uuid4, unique=True, editable=False)
email_confirmed = models.BooleanField(default=False)
def __str__(self):
return self.user.username
def save(self,*args,**kwargs):
if self.email_confirmed:
self.user.is_active=True
self.user.save()
super(Profile,self).save(*args,**kwargs)
Я не реализовал, но думаю, что это работает.